問題

問49 サブルーチンへの引数の渡し方のうち、変数を引数として渡しても、サブルーチンの実行後に変数の値が変更されないことが保証されているものはどれか。

ア 値呼出し
イ 結果呼出し
ウ 参照呼出し
エ 名前呼出し

解説と解答

 プログラム言語でサブルーチン(言語によっては、関数、プロシージャなど)に引数を渡す方法には、一般に値呼出しと参照呼出しがあります。

 値呼出しは、引数を渡すときに、引数の値だけを渡して、記憶している場所は渡さない方法です。メインルーチンとサブルーチンで、それぞれ変数の記憶領域を確保します。このため、サブルーチンで変数の値を変更しても、メインルーチンに戻ったときには元の値のままになります。

 参照呼出しの場合は、引数の記憶領域(アドレス)が渡されます。つまり、メインルーチンとサブルーチンで、変数の記憶領域が共有されます。したがって、サブルーチンでその変数に対して行った操作はメインルーチンに戻っても、そのまま有効になります。

 以上から正解はアです。なお、エの名前呼出しはALGOLというプログラム言語で使われていました。イの結果呼出しは調べてみましたが、該当する言葉がみつかりませんでした。ダミーと思われます。

<参考>
平成19年秋ソフトウェア技術者試験 午前問36

 メインプログラムを実行した後、メインプログラムの変数X 、Y の値はいくつになるか。

 ここで、仮引数X は値呼出し(call by value)、仮引数Y は参照呼出し(call by reference)であるとする。

 メインプログラムが手続きadd (X, Y)を呼出したときの、X, Yの値は、
X =2、Y =2です。

 その値は引数として手続きadd (X, Y)に渡されます。add (X, Y)の1行目の処理X =X +Y を行うと、X =2、Y =2なのでX =4 になり、2行目の処理Y =X +Y を行うと、X =4、Y =2なので、Y =6 になります。

 3行目のreturnでメインプログラムに戻りますが、X は値呼出しなので手続き内の値はメインプログラムに影響せず、Xは元のまま2です。一方Yは参照呼出しなので手続き内の値がメインプログラムにも引き継がれて、Yは 6になります。

城田 比佐子(しろた・ひさこ)
アイティ・アシストのインストラクター(プロスタッフ)。著書に『3週間完全マスター 基本情報技術者 2012年版』『3週間完全マスター 応用情報技術者 2012年版』などがある。