如何指针指针和运算符地址工作?

Ale*_*rty 6 c c++ pointers

拿这段代码:

int a;
int *pointer = &a;

int **b = &(&(*pointer));
Run Code Online (Sandbox Code Playgroud)

以上是否设置b为地址pointer

我问的原因是因为*pointer给出了它的值a,并且它的引用是地址a.这被视为仅仅是地址a,还是被视为pointer.

这有意义吗?我可以这样做:

&(*pointer) = a;
Run Code Online (Sandbox Code Playgroud)

zne*_*eak 7

在C中,您只能获得指向存储区域的指针(这意味着变量,数组元素或其他指针;它们称为"l值"),而不是任何表达式.您无法获得指向没有定义存储区域的表达式的指针(如添加或函数调用的结果).但应该注意的是,C++会将这些规则与参考文献混淆,但为了清楚起见,我将其排除在外.

指针不是神奇的:最后,它们只是整数.因此,当你得到指针的指针时,它就像你得到一个整数的指针.它没有更多的反响.

例如,如果你a在代码中得到指针,那么你只是将这个地址复制到另一个变量中.没有什么可以阻止你改变所述变量:

int a;
int* p = &a;
p = NULL;
Run Code Online (Sandbox Code Playgroud)

这样做,你a将保持不变.所有你可以改变的a是它的价值.它的地址是不可变的.任何其他东西都意味着&a = NULL(或任何其他指针值)将起作用,但事实并非如此.