前回は、ローカル変数とグローバル変数について学びました。今回は、静的なローカル変数などと呼ばれているスタティック変数について学びます。
スタティック変数とは
ローカル変数は、ブロック内でのみ有効です。このため、ブロック内の処理が終了すると、変数は使用できなくなります。次に同じブロック内の処理を行うときは、変数を作り直すことになり、前回とは別のメモリを使用するため、値も変わってしまいます。
そこで、型名の前にstatic(スタティック)とつけることにより、グローバル変数と同じようにプログラムが終了するまで、変数の値が残るようになります。ただし、グローバル変数と違い、利用できるのは、宣言されたブロック内のみになります。
このような変数を静的なローカル変数とも呼ばれたりしますが、スタティック変数と呼ばれることが多いです。
また、このスタティック変数は、グローバル変数と同様に、初期化しない場合、自動的に 0 で初期化されることになっています。
スタティック変数を使用したサンプルプログラムを次に示します。
#include <stdio.h>
void update(void);
int main(void)
{
int number = 5;
update();
printf("main:%d\n", number);
number++;
update();
printf("main:%d\n", number);
update();
return 0;
}
void update(void)
{
static int number;
number++;
printf("update:%d\n", number);
}
update関数内で、numberをスタティックで宣言しています。これにより、update関数が最初に呼び出されたときは、numberの値は 0 になっています。
そして、インクリメントし、1 になります。次にupdate関数が呼び出されると、インクリメントし、2になります。
update関数内のnumberとmain関数のnumberは別変数なので、main関数のnumber変数には影響しません。
サンプルプログラムの実行結果を次に示します。
実行結果
update:1
main:5
update:2
main:6
update:3
このように、update関数が終了しても、numberの値は保持されていることが分かったかと思います。
スタティック変数については、簡単ですが、以上となります。