第10章 C言語の関数2 ~ 外部変数とstatic変数の説明を含む ~
今回は、内容が短かったので、もう一つ説明します。 static変数と(staticは、英語で静的なという意味)、外部変数というものを説明します。
まず、次の記述を打ち込んでください。 このプログラムは、関数を10回呼び出して、その関数の中で、 呼ばれた回数を毎回表示しようとしています。
— リスト25 —
#include <stdio.h> void counter( ); void main() { int i; for (i=0; i < 10; i++) { counter(); } } void counter( ) { int cnt=0; cnt++; printf("%d回目の呼び出しです\n", cnt); }
実行してみてください。どうなりましたか?
実は、変数には、人間で言うところの寿命に相当するものがあるのです。 通常の変数は、宣言した場所のすぐ外側にある、 「{ 」と「 }」の間までが寿命になっています (この範囲を、その変数のスコープと言います)。
上の例ならば、
void counter( ) { ←ここから int cnt=0; cnt++; printf("cntは今、%dです\n", cnt); } ←ここまで
ということは、一旦、関数 counter から main 関数に戻った時点で、 変数 cnt の寿命は尽きてしまっていたのです。 それ以降、関数 counter に入るたびに、 変数cntは作られて、またすぐに寿命が尽きているのです。
これでは、困ってしまいますね。正しくカウントアップできません。
これは、次のように変数を宣言すると、うまく行きます。
int counter( ) { static int cnt; cnt++; printf("cntは今、%dです\n", cnt); }
どうなりましたか?
staticを付けると、変数は、プログラムの開始から終了まで生き続けます。 つまり、プログラム中ずっと有効な寿命を与えられたのです。 さっそくコンパイルして、実行してみてください。
ちなみに、staticを付けると、変数は自動的に0に初期化されます。 しかし、便利だと思っても、多用しないでください。 あなたのプログラムを見た人は、staticを付けた変数には、 何か特別な意味があるはずだと解釈するからです。
しかし、static変数も結局は、関数 counter の中でしか使えません。 どこからでも使える便利な変数に、外部変数というものがあります。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針