每个指向/取消引用语法使变量意味着什么?

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

本文关键字:变量 意味着 什么 语法 引用 取消      更新时间:2024-05-09

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

问题:

"指针"和"引用"之间的区别在回答中解释了指针变量和引用C++变量之间的区别是什么?,但语法本身似乎根据上下文具有不同的含义。

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

例如,由于文字似乎在这里让我失望:

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

这方面的规则非常简单。 无论您在哪里看到声明,如果它在mainsome_namespace、 类内或函数的参数部分中,声明的含义都是一样的。 知道这一点,每当你看到

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&