C ++指针,初学者问题

时间:2010-03-30 06:21:38

标签: c++ pointers

只想问初学者问题......

这里,我做了一些代码,用于理解指针的概念/基础:

int a=1;
int *b=&a;
int **c = &b;
int ***d = &c;

cout << &*(&*d) << endl;

有人可以向我解释,为什么&*(&*d)返回“c”的地址而不是“b”的地址? 我也尝试了类似&*(&*(&*(&*(&*d))))的代码,但保留了返回地址“c”

非常感谢:)

5 个答案:

答案 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相同,因为两个表达式都是左值。