メインプログラムを実行した後、メインプログラムの変数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 │
┌─┼──┼──┤
│ア│ 2 │ 4 │
├─┼──┼──┤
│イ│ 2 │ 6 │
├─┼──┼──┤
│ウ│ 4 │ 2 │
├─┼──┼──┤
│エ│ 4 │ 6 │
└─┴──┴──┘
イ
値呼び出しは引数 (変数) の値をコピーして渡す渡し方である。
サブ関数の中で引数がどのような値に変化しても、呼び出した元プログラムの引数の値は変らない。
参照呼出しは引数 (変数) の値を共有する渡し方である。(アドレス渡し)
サブ関数の中で引数の値が変化したら、呼び出した元プログラムの引数の値にも反映される。
これを踏まえて、プログラムを順に追いかける。
X=2; ・・・X=2、Y=0
Y=2; ・・・X=2、Y=2
add(2,2);
X=2+2 ・・・X=4、Y=2
Y=4+2 ・・・X=4、Y=6
return;
終了時点では X=2、Y=6となる。
問19 | 目次 | 問21 |