リンカ・ローダと実行形式
C言語で、初期値を書かない局所変数とグローバル変数の、使い始めたときの値について正しいものはどれか。
- Aどちらも必ず0から始まる
- B局所変数は0から始まるが、グローバル変数の値は決まっていない
- Cグローバル変数は0から始まるが、局所変数の値は決まっていない(不定)
答えと解説を見る
正解:C. グローバル変数は0から始まるが、局所変数の値は決まっていない(不定)
グローバル変数や静的変数は.bssに置かれ、プログラムの開始時に0で埋められるので0から始まります。局所変数は関数が呼ばれるたびにスタック上に作られ、毎回0で埋めると時間がかかるため、前にその場所を使ったデータが残っているかもしれません。初期化しない局所変数を読むと結果が実行ごとに変わることがあるので、必ず初期化して使います。
- A. 局所変数は0にする手間をかけないので不定です。
- B. 逆です。
- C. 正しい。置かれる場所の違いによるものです。