スタティック変数

スタティック変数は、関数などのブロック内部のみアクセス可能だが、そのブロックを抜けても変数の値を保持する性質を持つ・・・。

今回は、関数内部に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