2
在未初始化的數據段,內核初始化初始化變量爲0。未初始化的數據段
但是,如果我們直接使用未初始化的變量(如int總和;以及不是int總和= 0;)並在程序中使用它,如sum = sum + n(n是任意數字),總和將取任何垃圾值。
那麼爲什麼總和會採取任何垃圾值,如果它已被內核初始化爲0?
在未初始化的數據段,內核初始化初始化變量爲0。未初始化的數據段
但是,如果我們直接使用未初始化的變量(如int總和;以及不是int總和= 0;)並在程序中使用它,如sum = sum + n(n是任意數字),總和將取任何垃圾值。
那麼爲什麼總和會採取任何垃圾值,如果它已被內核初始化爲0?
你似乎在問關於編譯時初始化和運行時初始化的區別。在下面的C語言代碼:
int i;
int main() {
int j;
return i + j;
}
i
是全球範圍的變量,因此是缺省初始化爲零,這是通過將其包括在程序的數據段來實現。這將作爲一個初始值塊寫入二進制文件,或者它將向加載程序描述塊的大小,當可執行文件啓動時,加載程序將用零填充它。
j
是一個局部變量,它將存在於寄存器或堆棧中。 C和C++選擇不默認初始化這些值,因此如果您在不初始化它們的情況下訪問它們,您將看到恰好在其寄存器/堆棧位置中的值。