2013-09-16 54 views
1

通常用此代碼,我們應該得到的指針的地址相同: 如果我們有這樣的代碼通常,i&i指向同一個地址指針在C++相同的變量有兩個不同的地址

int *i=NULL; 
int k=5; 
i=&k; 
printf("%p %p",&i,i); 

這裏是printf的結果(只有最後一位數字是不同的):0x7fff5fbff8b8 0x7fff5fbff8b4

可以任何一個請解釋我爲什麼?

回答

11

因爲它們不一樣。 i是一個指針,它包含變量的地址k&i是一個指針,它包含變量的地址i

+3

'&i'不是一個指針,它是一個地址常量;) – dhein

+1

@Zaibis它是。這就像數字「42」是一個常數,但也是一個「int」。引用C++ 11§5.3.1:一元'&'運算符的結果是指向其操作數的指針。 –

+0

非常感謝,我很困惑:),現在已經清楚了 – satyres

3

i是指向一個整數的指針。 i的值是一個地址(地址k)。

&ii的地址。

您只輸出兩個不同的地址。

你可以這樣做:

#include <cstdio> 

int main() 
{ 
    int *i=NULL; 
    int k=5; 
    i=&k; 
    int** j = &i; 
    printf("%p %p %p",&i,i,j); 
} 

你可以得到的輸出:

[[email protected]]:~$ r 
0xbfc8a1a8 0xbfc8a1a4 0xbfc8a1a8 

見的第一個地址是一樣的三分之一。因爲j的值是i的地址。

+0

謝謝所以多爲解釋:)欣賞它:) – satyres

相關問題