通常用此代碼,我們應該得到的指針的地址相同: 如果我們有這樣的代碼通常,i
和&i
指向同一個地址指針在C++相同的變量有兩個不同的地址
int *i=NULL;
int k=5;
i=&k;
printf("%p %p",&i,i);
這裏是printf
的結果(只有最後一位數字是不同的):0x7fff5fbff8b8 0x7fff5fbff8b4
可以任何一個請解釋我爲什麼?
通常用此代碼,我們應該得到的指針的地址相同: 如果我們有這樣的代碼通常,i
和&i
指向同一個地址指針在C++相同的變量有兩個不同的地址
int *i=NULL;
int k=5;
i=&k;
printf("%p %p",&i,i);
這裏是printf
的結果(只有最後一位數字是不同的):0x7fff5fbff8b8 0x7fff5fbff8b4
可以任何一個請解釋我爲什麼?
因爲它們不一樣。 i
是一個指針,它包含變量的地址k
,&i
是一個指針,它包含變量的地址i
。
i
是指向一個整數的指針。 i
的值是一個地址(地址k
)。
&i
是i
的地址。
您只輸出兩個不同的地址。
你可以這樣做:
#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
的地址。
謝謝所以多爲解釋:)欣賞它:) – satyres
'&i'不是一個指針,它是一個地址常量;) – dhein
@Zaibis它是。這就像數字「42」是一個常數,但也是一個「int」。引用C++ 11§5.3.1:一元'&'運算符的結果是指向其操作數的指針。 –
非常感謝,我很困惑:),現在已經清楚了 – satyres