どうも多浪Fランぼっち底辺大学生です。
今回は、静的(スタティック)変数を使って入力値の最大値・最小値を導くプログラムを紹介していきます。
と言った内容に関して書いていきます。
- 静的(スタティック)変数の説明
- 静的変数の使い方
- 静的変数を使って最大値・最小値を求める
このようなことを知りたい人はサッと目を通してみて下さい。
それでは行ってみましょう(‘ω’)ノ
静的変数とは?
静的変数とは「新・明解C言語 入門編」によると
プログラムの開始時、具体的にはmain関数を実行する前の準備段階でオブジェクトが生成され、プログラムの終了時に破棄される。
すなわち、”永遠の命”が与えられるわけです。
新・明解C言語 入門より
このように説明されています。
そして、実際のコードの書き方としては以下の通りとなります。
1 |
static int count = 0; |
・・・・・
この説明を見ても、良く分からない人は多いのではないでしょうか?
と言うことで、今度は具体例を示して静的変数を説明します。
静的変数の使い方の具体例
具体例を示すにあたって、プログラムの仕様を以下のように定義します。
- int func()関数の中に整数型の静的変数を定義
- func()関数内では静的変数の値に2を加算する。
- func()関数が呼び出された回数をカウントする
- func()関数が呼び出された回数と静的変数の値を出力する
それでは、プログラムを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include<stdio.h> int count = 0; //グローバル変数 int func(); int main() { for (int i=0; i<=6; i++) { count++; printf("呼び出し回数 = %d, 静的変数の値 = %d\n", count, func()); } } int func() { static int num = 0; //静的変数,0で初期化 num += 2; return num; } |
このプログラムを実行すると、以下のようになります。

呼び出し回数が増えるごとに、静的変数の値も2ずつ増えていることが分かります。
このような動作こそが静的変数の特徴であると言えます。
この具体例を通して静的変数を理解したことでしょう。
しかし、まだよく分かっていない人もいると思います。
ということで、静的変数を使った場合と使わなかった場合の実行結果を見てもらいたいと思います。
静的変数を使う場合と使わなかった場合の違い
先ほどのプログラムの静的変数を、静的ではない変数に変更して実行結果を示したいと思います。
1 |
static int num = 0; |
この一文のプログラムから、”static”を取り除きます。↓↓
1 |
int num = 0; |
そして、実行結果は以下のようになりました。

呼び出し回数が増えても、静的変数の値は一定のままです。
理由としては、func()関数が呼び出されるごとに”num”変数が初期化されるからです。
func()関数が呼び出されるごとに、「int num = 0」が実行されて初期化される。
因みに、静的変数を使った場合も「static int num = 0」と初期化を行っています。
しかし、静的ではない変数とは異なり、初期化が一回だけしか行われない点に注意したいところです。
また、静的変数が初期化(定義)された瞬間から、プログラムが終了するまで値が保持され続ける点にも気を付けたいところですね。
以上が静的変数の説明でした。
- 静的変数自体は、定義された瞬間からプログラム終了時まで保持される
- 静的ではない変数自体は、関数内のみでしか保持されない
静的変数を使って最大値・最小値を求めるプログラム
ここまで、静的変数についてザックリと説明してきました。
さて、それでは静的変数を使った最大値・最小値を求めるプログラムを示していきたいと思います。
仕様は以下の通りです。
- 最大値を求めるmax_value(int n)関数を定義
- 最小値を求めるmin_value(int n)関数を定義
- データの個数分だけデータを入力し、最小値と最大値を更新
- 最小値と最大値の初期値は、1回目のデータとする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
#include<stdio.h> int max_value(int n); int min_value(int n); int main() { int data, number, mini, max; printf("データの個数を入力 : "); scanf("%d", &data); printf("\n"); for (int i=1; i<=data; i++) { printf("No.%d : ",i); scanf("%d", &number); mini = min_value(number); max = max_value(number); printf("最小値 = %d, 最大値 = %d", mini, max); printf("\n"); } } int max_value(int n) { static int j = 0; static int max; //maxに初期値を設定 if (j == 0) { max = n; j++; } if (max < n) { max = n; } return max; } int min_value(int n) { static int j = 0; static int min; //minに初期値を設定 if (j == 0) { min = n; j++; } if (min > n) { min = n; } return min; } |
このプログラムを実行すると、以下の実行結果となりました。

仕様通りに実行できました。
チョット解説
今回は3類の静的変数を設けました。
- max・・・最大値を保持
- min・・・最小値を保持
- j ・・・関数の呼び出し回数を保持
maxはmax_value関数内で宣言している静的変数であり、最大値を保持する変数です
minはmin_value関数内で宣言している静的変数であり、最小値を保持する変数です。
jはmax_value関数及びmin_value関数で宣言している静的変数であり、それぞれの関数が呼び出された回数を保持する役割を持った変数です。
静的変数”j”に関しては、「最小値と最大値の初期値は、1回目のデータとする」の仕様を実装するために設定しました。
※グローバル変数でもよかったのですが、あえて静的変数にしました(‘ω’)ノ
おわり
以上で、静的変数を使って最大値・最小値を求めるプログラムの紹介を終わります。
静的変数はあまり使い道が無いような・・・気がしますが、サラッと覚えられるのでこの記事を読んで覚えてしまいましょう。
