平成23年度 秋期 応用情報技術者試験 午前 問22
テクノロジ/ソフトウェアメインプログラムを実行した結果はどれか。ここで,static は静的割当てを,auto は動的割当てを表す。 〔メインプログラム〕 auto int x, y; x = f(2) + f(2); y = g(2) + g(2); 〔関数 f(u)〕 auto int u; auto int v = 1; v = v + u; return v; 〔関数 g(u)〕 auto int u; static int v = 1; v = v + u; return v;
出典:平成23年度 秋期 応用情報技術者試験 午前 問22
- アx=6,y=6
- イx=6,y=8
- ウx=8,y=6
- エx=8,y=8
正解:イ
解説
fの変数vはauto(動的)割当てのため呼出しのたびにv=1から再初期化され,f(2)は毎回1+2=3を返すのでx=3+3=6です。gの変数vはstatic(静的)割当てのため値が呼出しをまたいで保持され,1回目は1+2=3,2回目は前回のv=3を引き継いで3+2=5となるのでy=3+5=8です。
選択肢ごとの解説
- ア誤り。yについてstatic変数の値が呼出し間で保持されることを考慮せず,g(2)を毎回3と計算した場合の値です。
- イ正しい。x=3+3=6,y=3+5=8です。
- ウ誤り。xとyの計算結果が入れ替わっています。
- エ誤り。xについてauto変数がリセットされずに値を引き継ぐと誤って計算した場合の値です。