スタティック変数は、関数などのブロック内部のみアクセス可能だが、そのブロックを抜けても変数の値を保持する性質を持つ・・・。
今回は、関数内部に3つの変数を宣言し、関数が呼ばれるたびにその値がどう変化するかを見ていく・・・。
スタティック変数を含む3つの変数を扱う関数static_variable_funcを宣言・・・。
main関数の処理は、
static_variable_funcを3回呼び出すだけ・・・。
static_variable_funcの定義は、
まず、int型のstatic変数a, int型の10に初期化したstatic変数b, 0に初期化した通常のint型ローカル変数xを用意・・・。
それぞれの変数の値を出力・・・。
それぞれの変数に10を足す・・・。
これで、どうなるかを試してみると、
$ ./static_variable a = 0 b = 10 x = 0 a = 10 b = 20 x = 0 a = 20 b = 30 x = 0 $
こうなる・・・。
1回目のstatic_variable_funcの呼び出しでは、bは初期化時の値10、xも初期化時の値0である・・・。
aが0なのはなぜか?
ローカル変数は初期化していない場合、値は不定なのでいろんな値が入る可能性がある・・・。
しかし、実はスタティック変数は初期化されない場合は自動的に0に初期化されるという性質を持っている・・・。
なのでaも0になっているのである・・・。
2回目の呼び出しでは、aが10、bが20、xが0となっている・・・。
aは前回、足された10が保持されている・・・。
bも前回、初期化時の10に、10を足した20が保持されている・・・。
xはローカル変数のため、前回の値は保持されず、あらたに0に初期化されている・・・。
3回目も、aとbは前回の値に10足された値となっている・・・。
xは保持されないので、0のまま・・・。
Sample/static_variable.c at master · bg1bgst333/Sample · GitHub