メインプログラムを実行した後、メインプログラムの変数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となる。
タグ:プログラミング