本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成28年度 春期 応用情報技術者試験問題と解説

問20

メインプログラムを実行した後、メインプログラムの変数XYの値は幾つになるか。ここで、仮引数Xは値呼出し (call by value)、仮引数Yは参照呼出し (call by reference) であるとする。

メインプログラム
 X=2;
 Y=2;
 add(XY);

手続きadd(XY)
 XXY;
 YXY;
 return;

      ┌──┬──┐
      │ X │ Y │
    ┌─┼──┼──┤
    │ア│ 2 │ 4 │
    ├─┼──┼──┤
    │イ│ 2 │ 6 │
    ├─┼──┼──┤
    │ウ│ 4 │ 2 │
    ├─┼──┼──┤
    │エ│ 4 │ 6 │
    └─┴──┴──┘


正解


解説

値呼び出しは引数 (変数) の値をコピーして渡す渡し方である。
サブ関数の中で引数がどのような値に変化しても、呼び出した元プログラムの引数の値は変らない。

参照呼出しは引数 (変数) の値を共有する渡し方である。(アドレス渡し)
サブ関数の中で引数の値が変化したら、呼び出した元プログラムの引数の値にも反映される。

これを踏まえて、プログラムを順に追いかける。
 X=2;       ・・・X=2、Y=0
 Y=2;       ・・・X=2、Y=2
 add(22);
    X22  ・・・X=4、Y=2
    Y42  ・・・X=4、Y=6
    return;
終了時点では X=2、Y=6となる。

問19 目次 問21