只想问初学者问题......
这里,我做了一些代码,用于理解指针的概念/基础:
int a=1;
int *b=&a;
int **c = &b;
int ***d = &c;
cout << &*(&*d) << endl;
有人可以向我解释,为什么&*(&*d)
返回“c”的地址而不是“b”的地址?
我也尝试了类似&*(&*(&*(&*(&*d))))
的代码,但保留了返回地址“c”
非常感谢:)
答案 0 :(得分:4)
因为&*
相互抵消了。 *
取消引用d
,其中包含c
的值。然后&
提供c
的地址或d
的值。
答案 1 :(得分:3)
&
和*
互相取消。如果要取消引用指针,只需要*
。所以,试试**d
。
答案 2 :(得分:1)
简单规则:使用*
访问/提供值,使用&
访问/提供地址。
答案 3 :(得分:0)
*
取消引用指针,并为您提供指向的内容。
&安培;基本上是地址。
当在同一点使用它们相互抵消时,&*d
相当于d
如果您想要打印c的地址,则需要*d
,对于b,您需要**d
,对于a中的数据,您需要***d
。
答案 4 :(得分:0)
如果x
是变量,则&*x
不完全等于x
。前者是左值,而后者是左值。另一方面,*&x
始终与x
相同,因为两个表达式都是左值。