2.10 對於沒有初始化的變量的初始值可以作怎樣的假定? 如果一個全局變量初始值為 ``零", 它可否作為空指針或浮點零?

具有 ``靜態'' 生存期的未初始化變量  (即, 在函數外聲明的變量和 有靜態存儲類型的變量) 可以確保初始值為零, 就像程序員鍵入了  ``=0'' 一樣。因此, 這些變量如果是指針會被初始化為正確的空指 針, 如果是浮點數會被初始化為 0.0 (或正確的類型, 參見第 5 章)。

具有 ``自動'' 生存期的變量 (即, 沒有靜態存儲類型的局部變量) 如 果沒有顯示地初始化, 則包含的是垃圾內容。對垃圾內容不能作 任何有用的假設。

這些規則也適用於數組和結構 (稱為 ``聚合體'' ); 對於初始化來說, 數組和結構都被認為是 ``變量''。

用 malloc() 和 realloc() 動態分配的內存也可能 包含垃圾數據, 因此必須由調用者正確地初始化。用 calloc()  獲得的內存為全零, 但這對指針和浮點值不一定有用  (參見問題 7.26 和第 5 章)。

參考資料: [K&R1, Sec. 4.9 pp. 82-4]; [K&R2, Sec. 4.9 pp. 85-86]; [ISO, Sec. 6.5.7, Sec. 7.10.3.1, Sec. 7.10.5.3]; [H&S, Sec. 4.2.8 pp. 72-3, Sec. 4.6 pp. 92-3, Sec. 4.6.2 pp. 94-5, Sec. 4.6.3 p. 96, Sec. 16.1 p. 386.]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)