C言語の基礎
int f(void) {
static int s = 0;
int a = 0;
s++;
a++;
return s * 10 + a;
}上の関数 f を3回続けて呼び出したとき、3回目の戻り値として正しいものはどれか。
- A11
- B13
- C31
答えと解説を見る
正解:C. 31
static を付けた局所変数 s は、プログラムの開始前に1回だけ0に初期化され、関数から戻っても値が残ります。そのため s は呼び出しのたびに1、2、3と増えます。static のない a は呼び出しのたびに新しく作られて0から始まるので、毎回1です。3回目の戻り値は 3 × 10 + 1 = 31 です。
- A. s も呼び出しのたびに0から始まると考えた場合の値です。static の変数は値が残ります。
- B. static の s と、static のない a の働きを逆にした場合の値です(s = 1、a = 3)。
- C. 正しい。s は3まで増え、a は毎回1なので 3 × 10 + 1 = 31 です。