用下面的代碼爲什麼GCC聲明INT後consistenly沒有打印0
#include <stdio.h>
int main() {
int num;
printf("%d\n", num);
int* num2;
printf("%p\n", &num2);
return 0;
}
我得到了類似結果:
從Memory allocation for global and local variables, 我知道全局變量num
初始化爲0
, 即使它沒有被我初始化。
現在我只是想隨意的東西,所以我的代碼更改爲
#include <stdio.h>
int main() {
int num;
printf("%d\n", num);
int* num2;
printf("%p\n", num2);
return 0;
}
,現在我得到
問題:我不知道爲什麼值num
不再是0
。
在我看來,我在做什麼與變量num2
及其值HAS 什麼都不做num
。
我不僅感興趣的原因,但也想聽聽你的意見 關於這種行爲。
'讀取未初始化變量的值是未定義的行爲。只有當它們可以包含陷阱表示時,例如浮點數。不過,您可能會得到未定義的*結果*。 – wildplasser
@wildplasser hm我認爲未讀初始化變量的讀取值通常稱爲UB:http://stackoverflow.com/documentation/c/364/undefined-behavior/2576/reading-an-uninitialized-object-that-is - 不支持內存#t = 201608101257444574981 –
取消引用指針!=讀取變量。 – wildplasser