HOME»ソフトウェア開発技術者平成16年春期»午前問44
ソフトウェア開発技術者平成16年春期 午前問44
問44
次のメインプログラムを実行した結果はどれか。ここで,static は静的割当てを,auto は動的割当てを表す。
- x=6,y=6
- x=6,y=8
- x=8,y=6
- x=8,y=8
- [出題歴]
- 応用情報技術者 H23秋期 問22
分類
テクノロジ系 » アルゴリズムとプログラミング » プログラム言語
正解
イ
解説
プログラム中で使われる変数には「静的割当て」と「動的割当て」という2種類のメモリ割り当て方式があります。
x=ƒ(2)+ƒ(2) の部分は、
[ƒ(2) 1回目]
[ƒ(2) 2回目]1回目と同じです。
メインプログラム中の変数xは、3+3=6となります。
[g(2) 1回目]
[g(2) 2回目]
メインプログラム中の変数yは、3+5=8となります。
したがって正しい組合せは「イ」です。
- 静的割当て変数
- 全域的変数とも呼ばれ、プログラム全体を通して領域を確保され、関数が終了しても解放されず値を保持し続ける変数。
- 動的割当て変数
- 局所的変数とも呼ばれ、関数内だけで自動的(auto)に領域が確保され、関数が終了するとその変数は一度解放される変数。
x=ƒ(2)+ƒ(2) の部分は、
[ƒ(2) 1回目]
auto int u; | //u=2 |
auto int v=1; | //v=1 |
v=1+2; | //v=3 |
return v; | //3を返す |
auto int u; | //u=2 |
auto int v=1; | //v=1 |
v=1+2; | //v=3 |
return v; | //3を返す |
[g(2) 1回目]
auto int u; | //u=2 |
static int v=1; | //v=1 |
v=1+2; | //v=3 |
return v; | //3を返す |
auto int u; | //u=2 |
static int v=1; | //vはすでに確保済みなので3のまま |
v=3+2; | //v=5 |
return v; | //5を返す |
したがって正しい組合せは「イ」です。