2010-03-30 97 views
3

只想问一个初学者的问题...C++指针,初学者问

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

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

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

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

感谢很多:)

回答

4

因为&*相互抵消。 *解除引用d它给出了c的值。然后&给出地址c,或者d的值。

+0

谢谢当然...... lottt – BobAlmond 2010-03-30 06:46:28

3

&*相互抵消。如果你想取消引用指针,你只需要一个*。所以,试试**d

+0

...... !!! – jjj 2010-03-30 06:31:18

1

简单规则:使用*来访问/提供值,使用&来访问/提供地址。

0

*取消引用指针,并给出它指向的内容。 &基本上是addressof。

当在同一地点使用它们相互抵消,如果你要打印的c您需要*d,对于B则需要**d地址&*d相当于d 以及在这些数据,您需要***d

0

如果x是一个变量,那么&*x并不完全等于x。前者是一个右值,而后者是左值。另一方面,*&x总是与x相同,因为这两个表达式都是左值。