每个 depointer/dereference 语法使变量意味着什么?

What does each depointer/dereference syntax make the variable mean?

编辑:由于 int * xint* xint *x 之间没有区别,我删除了该部分以更好地澄清我的困惑。

问题:

What are the differences between a pointer variable and a reference variable in C++? 的回答中解释了“指针”和“引用”之间的区别,但语法本身似乎根据上下文有不同的含义。

声明指针或引用时,*& 修饰符使这些变量在后面表示什么意思?它们是指针、原始值、对象引用等吗

例如,因为这里的文字似乎让我失望:

void foo(int* x, int& y) {
    assert(*x == ??);
    assert(&x == ??);
    assert(*y == ??);
    assert(&y == ??);
}

这方面的规则非常简单。无论您在何处看到声明,无论是在 mainsome_namespace、class 内还是在函数的参数部分,声明都具有相同的含义。要知道,每当你看到

type_name * variable_name

您正在声明一个指针。随处可见

type_name & variable_name

您正在声明引用。这里的间距无关紧要,int* fooint * fooint *foo 都声明了一个名为fooint*。这里唯一棘手的一点是 *& 适用于变量名,而不是类型。这意味着在

这样的代码中
int * foo, bar;

foobar 不是两个指针。 foo 是指向 int 的指针,而 bar 只是一个 int。要制作 barint 你需要使用

int * foo, * bar;

并且负责声明。

使用,如果你看到

*variable_name

然后你通过 variable_name 间接寻址(调用一元 operator*)。如果你看到

&variable_name

然后您将获得 variable_name 的地址,或调用 variable_name 类型的 operator&