當運行這樣的代碼它顯示d的值 - > 4 如果取消對COUT < < &一個它顯示的一個適當的值 - > 1指向下一個地址
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a=1,b=2,c=3,d=4;
/*cout<<&a<<endl;
cout<<&b<<endl;
cout<<&c<<endl;
cout<<&d<<endl;*/
cout<<*(&b - 0x1);
}
有人能幫我理解爲什麼cout會改變返回值嗎?
這是未定義的行爲,所以任何事情都可能發生。 – interjay
由於這是一個猜測,我把它放在這裏:我不得不說,因爲你沒有使用它們,所以你調用未定義的行爲,因爲'a'不再存在,所以變量得到優化。 – NathanOliver
我同意NathanOliver。你確定'4'來自'd'嗎?你很可能只是從堆棧中獲取一些價值。嘗試將'd'的值改爲其他值,看看打印的值是否仍然爲4.最終,過度依賴編譯器以特定順序將內容放入堆棧中是有風險的,除非您非常瞭解編譯器。特別是像這樣的東西,這是不確定的,interjay指出。 –