連結器與載入器與執行檔格式
在C語言中,關於未寫初始值的區域變數與全域變數,開始使用時的值,下列何者正確?
- A兩者一定都從0開始
- B區域變數從0開始,但全域變數的值不確定
- C全域變數從0開始,但區域變數的值不確定(未定)
查看答案與解析
正確答案:C. 全域變數從0開始,但區域變數的值不確定(未定)
全域變數與靜態變數放在.bss,程式開始時會以0填滿,所以從0開始。區域變數則是在每次函式被呼叫時建立於堆疊上,由於每次都用0填滿會耗費時間,因此該位置可能殘留先前使用過的資料。讀取未初始化的區域變數,結果可能每次執行都不同,所以務必先初始化再使用。
- A. 區域變數不會花功夫設為0,所以是未定的。
- B. 剛好相反。
- C. 正確。這是放置位置不同所致。