平成16年春期試験問題 午前問43
問43解説へ
次の関数 add を考える。メインプログラムを実行した後,メインプログラムの変数X,Yの値はいくつになるか。ここで,仮引数Xは値呼出し(call by value),仮引数Yは参照呼出し(call by reference)であるとする。
広告
解説
プログラム内で関数にパラメータ(引数:ひきすう)を渡す方法には「値呼出し」「参照呼出し」という2つのタイプがあります。
- 値呼出し(call by value)
- 引数に変数が保持する値のコピーを入れて渡す方法。渡された変数は関数内でのみアクセスすることができる。関数内で値を保持する変数は新しいメモリ領域に作成されるため、関数内で変数の値を上書きしても元の変数の値には反映されない。
- 参照呼出し(pass by reference)
- 引数として変数のポインタ(メモリアドレス)を渡す方法。呼び出された関数内で引数の内容に直接アクセスすることになるため、関数内で変数の値を上書きすると元の変数の値にも反映される。
X=2; //値呼出し
Y=2; //参照呼出し
add(2,2);
--サブルーチンここから--
X=2+2; //X=4
Y=4+2; //Y=6
--サブルーチンここまで--
仮引数Xは値呼出しなので、メインプログラム中の変数Xとサブルーチン中の変数Xは別物として扱われます。このため、変数Xの値はサブルーチン呼出し前の値である「2」、一方、仮引数Yは参照呼出しなのでサブルーチン内で値を変更された「6」になります。したがって正しい組合せは X=2,Y=6 の「イ」です。Y=2; //参照呼出し
add(2,2);
--サブルーチンここから--
X=2+2; //X=4
Y=4+2; //Y=6
--サブルーチンここまで--
広告