我試圖返回一個指針的使用下面的代碼的地址的地址:返回一個指針
#include <iostream>
using namespace std;
int main(){
int x = 5;
int *p = &x;
//int **pp = &p;
cout << &p << endl;
return 0;
}
但是什麼會打印是0x28fea8,這是同一個地址爲x本身。現在,如果我取消上面唯一註釋行的註釋並保留其他所有內容,那麼打印的內容是0x28fea4,這似乎是指針的正確地址。
我的問題是爲什麼我需要未註釋的行來顯示指針的正確地址?
爲什麼 「COUT < < p < < ENDL」 和 「COUT < < & p < < ENDL」 既顯示0x28fea8如果該行被留下評論?
不應該 「COUT < < & p < < ENDL」 顯示0x28fea4不管其他線的?
如果有幫助,我使用Qt Creator作爲我的編譯器/ ide。我從以下鏈接下載我的編譯器:http://web.stanford.edu/~rawatson/qt/windows_install/index.html
編輯:好吧,我真是無聊。我的問題是我通過更改值來比較地址,然後重新運行該程序。相反,我應該通過在一次程序運行中將它們全部打印進行比較。當我在一個程序中進行比較時,我得到了不同的地址p和& p,因爲它應該是。
你可以添加使用的編譯器標誌到你的文章?你的例子在Ubuntu上使用-O3的G ++ 4.8.4正常工作:當我打印p和打印&p時,我得到兩個不同的輸出。 – Cheiron
'然而,打印出來的地址與x本身的地址相同。[False。](http://rextester.com/RZRVU60305)'p'和'&x'是相同的。 「&p」是不同的,因爲性質本來就是這樣。 –
也許這是我的編譯器,我更新了我的帖子,並鏈接到了我下載的地方。 –