情報セキュリティスペシャリスト平成25年春期 午前Ⅰ 問7

問7

メインプログラムを実行した後,メインプログラムの変数X,Yの値はいくつになるか。ここで,仮引数Xは値呼出し(call by value),仮引数Yは参照呼出し(call by reference)であるとする。
am1/20.gif/image-size:292×87
  • am1/20a.gif/image-size:148×141

            
  • [出典]
  • 応用情報技術者
    平成25年春期 問20と同題

分類

テクノロジ系 » アルゴリズムとプログラミング » プログラム言語

正解

解説

プログラム内で関数にパラメータ(引数:ひきすう)を渡す方法には「値呼出し」「参照呼出し」という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=2Y=6 の「イ」です。
© 2014-2024 情報処理安全確保支援士ドットコム All Rights Reserved.

Pagetop