2010-03-30 131 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相同,因爲這兩個表達式都是左值。