C言語の基礎

int f(void) {
    static int s = 0;
    int a = 0;
    s++;
    a++;
    return s * 10 + a;
}

上の関数 f を3回続けて呼び出したとき、3回目の戻り値として正しいものはどれか。

  1. A11
  2. B13
  3. 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 です。
この分野を解く 分野ページへ

C言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

C言語の基礎のほかの問題

  1. C言語で、(1) 関数の中で static を付けずに宣言した局所変数、(2) malloc で確保した領域、(3) 関数の外で宣言した変数、のそれぞれが存在する期間(寿命)の組み合わせとして正しいものはどれか。
  2. int は32ビット(最大値 2147483647)とする。上の関数 fact(n) が、n の階乗をオーバーフローを起こさずに正しく返す最大の n はどれか。
  3. int は4バイト、ポインタは8バイトとする。int 型へのポインタ p の値(番地)が 0x1000 のとき、p + 3 の値はどれか。
  4. int は4バイト、ポインタは8バイトとする。上のプログラムを実行したときの出力として、正しいものはどれか。
  5. int は4バイトとする。上のコードを実行したときの出力として、正しいものはどれか。