HOME»ソフトウェア開発技術者平成16年春期»午前問43
ソフトウェア開発技術者平成16年春期 午前問43
問43
次の関数 add を考える。メインプログラムを実行した後,メインプログラムの変数X,Yの値はいくつになるか。ここで,仮引数Xは値呼出し(call by value),仮引数Yは参照呼出し(call by reference)であるとする。
- [出題歴]
- 応用情報技術者 H25春期 問20
- 応用情報技術者 H28春期 問20
- ソフトウェア開発技術者 H19秋期 問36
分類
テクノロジ系 » アルゴリズムとプログラミング » プログラミング
正解
イ
解説
プログラム内で関数にパラメータ(引数:ひきすう)を渡す方法には「値呼出し」「参照呼出し」という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
--サブルーチンここまで--