Thinkers'Studio
JavaとC言語の自習ツール
関数内スタティック変数の使用例

関数の中に宣言するスタティック変数の使い方

 関数の中で宣言したスタティック変数は、外部から見えないので安全という点では自動変数と同じですが、関数が呼ばれたときだけ存在するのではなく、その値は関数から戻った後も残ります。ですから、前回呼ばれたときの値を参照することができます。
 その例を示します。次の関数は2と3の倍数を避けて次に大きい整数を順に取り出すものです。

【 次の整数を取り出すプログラム 】
#include <stdio.h>

int getNext() {
    static int num;

    do {
        num++;
    } while( (num % 2 == 0 )  || ( num % 3 == 0  ) );
    return num;
}

 ここではnumの初期値をデフォルトの0にしていますが、関数呼び出しの度に初期化されることはありませんから、初期値を
  static int num = 1000000;
のように指定することもできます。
 この関数は次のように呼び出します。

main()
{
    int     n;

    while( ( n = getNext() ) < 30 )
        printf( "%5d\n", n );
}

【クイズ】
 上のmainを実行すると、どんな結果が得られるでしょう?    (答えは、次回のTips で ・・・)

【前回の答え】 実行結果はつぎのようになります。 (前回の問題を見る
              1
              1
              1
              1
              1
              1
              1
              1
              1
              1