第2種情報処理技術者試験 1999年度 = 平成11年度・秋期 午前 問39

 次のプログラムを実行したときの結果はどれか。ここで、仮引数xは値呼出し(call by value)、yは参照呼出し(call by reference)とする。

メインプログラム サブプログラム sub(x,y)
   a=3;    x=x+y;
   b=2;    y=x+y;
   sub(a,b);    return;

 ア a=3,b=2  イ a=3,b=7  ウ a=5,b=2  エ a=5,b=7

解答

 イ

解説

 関数・モジュール間の引数の受け渡しには、次の二つがあります。
値渡し(call by value)
 呼出し側が渡す引数のコピーを呼び出される側が受け取ります。したがって、その値を関数・モジュール内で変更しても、呼出し側の引数には反映されません。

参照渡し(call by reference)
 呼出し側が渡す引数の実体を呼び出される側が受け取ります。したがって、その値を関数・モジュール内で変更した場合、呼出し側の引数に反映されることになります。
 本問では、サブプログラムsub内でxの値は5になり、yの値は7になります。したがって、参照渡しであるbの値は7となりますが、値渡しであり値が変更されないaの値は3のままです。


BohYoh.comトップページへ