【問題】
メインプログラムを実行した後、メインプログラムの変数X、Yの値は幾つになるか。ここで、仮引数Xは値呼び出し(call by value)、仮引数Yは参照呼出し(call by reference)であるとする。
メインプログラム
X=2; Y=2;
add(X,Y);
手続きadd(X,Y)
X=X+Y;
Y=X+Y;
return;
【解答】
問題文が聞いているのは、「メインプログラムの変数X、Yの値」であることに注意する。
とすると、Xは値呼び出しであるから、メインプログラムのX=2が手続きaddの仮引数Xに代入されるものの、returnで返ってくる値をメインプログラムのXには入れていないため、X=2のままとなる。
一方、Yは参照呼出しであるから、メインプログラムのY=2の参照値が手続きaddの仮引数Yに与えられるため、手続きaddで行ったYの値の変更は、メインプログラムに戻った時にも保存されることとなる。
ここで、実際にプログラムをトレースすると、
X=2+2;
Y=4+2;
となり、Y=6となる。
よって、解答はX=2、Y=6となる。