メインプログラムを実行した結果はどれか。ここで、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 ;
┌───┬───┐
│ x │ y │
┌─┼───┼───┤
│ア│ 6 │ 6 │
├─┼───┼───┤
│イ│ 6 │ 8 │
├─┼───┼───┤
│ウ│ 8 │ 6 │
├─┼───┼───┤
│エ│ 8 │ 8 │
└─┴───┴───┘
イ
静的割り当ては、関数が一度呼び出されると、メモリが割り当てられ、プログラムが終了するまで、値が保持される。
動的割り当ては、関数が呼び出されるたびに、メモリが割り当てられ、値は保持されない。
【xについて】
1回目の f(2) の呼び出しでは、v = 1 + 2 = 3であり、2回目の f(2)の呼び出しでも vの値は保持されないから、
v = 1 + 2 = 3 となる。
従って、x = f(2) + f(2) = 3 + 3 = 6
【yについて】
1回目の g(2) の呼び出しでは
v = 1 + 2 = 3 であり、
2回目の g(2)の呼び出しでは、1回目の g(2)の呼び出しにより v = 3 が保持されるから、
v = 3 + 2 = 5 となる。
従って、
y = g(2) + g(2) = 3 + 5 = 8
問21 | 目次 | 問23 |