拿这段代码:
int a; int *pointer = &a; int **b = &(&(*pointer));@H_301_4@以上是否将b设置为指针的地址? @H_301_4@我问的原因是因为*指针给出了a的值,并且它的引用是a的地址.这被视为a的地址,还是被视为指针. @H_301_4@这有意义吗?我可以这样做:
&(*pointer) = a;
解决方法
在C中,您只能获得指向存储区域的指针(这意味着变量,数组元素或其他指针;它们称为“l值”),而不是任何表达式.您无法获得指向没有定义存储区域的表达式的指针(如添加或函数调用的结果).但应该注意的是,C将这些规则与参考文献混淆,但为了清楚起见,我将其排除在外.
@H_301_4@指针不是神奇的:最后,它们只是整数.因此,当你得到指针的指针时,它就像你得到一个整数的指针.它没有更多的反响.
@H_301_4@例如,如果在代码中获得指向a的指针,则只需将该地址复制到另一个变量中即可.没有什么可以阻止你改变所述变量:
int a; int* p = &a; p = NULL;@H_301_4@这样做,你将保持不变.所有你可以改变的是它的价值.它的地址是不可变的.任何其他东西都意味着& a = NULL(或任何其他指针值)将起作用,但事实并非如此.