過去問解きまくり研究所 ホーム

平成25年度 春期 午前 問20

開発技術

値呼出しに関する問題

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

〔プログラム〕

   メインプログラム        手続 add(X, Y)
   ┌──────────┐      ┌──────────┐
   │ X=2;           │      │ X=X+Y;         │
   │ Y=2;           │      │ Y=X+Y;         │
   │ add(X, Y);     │      │ return;        │
   └──────────┘      └──────────┘
答えと解説を見る

✓ これが正解イX=2 / Y=6

解説

写しで渡した変数は戻らず、別名の変数は戻ります。

手続の側の変数は仮引数と呼ばれ、名前が同じでも呼ぶ側とは別のものとして扱われます。値呼出しでは値を写して渡しますので、手続の中で書き換えても呼んだ側には戻りません。参照呼出しでは変数のアドレスを渡しますので、同じ入れ物を書き換えることになり、呼んだ側にも反映されます。この違いを先に押さえてから、手続の中を一行ずつ進めます。一行目で二つの値を足した結果が、写しのほうの変数に入ります。二行目の右辺は、その行に来た時点の値で計算しますので、一行目で書き換えた後の値を使います。その結果が別名のほうの変数に入り、呼んだ側の変数も同じ値になります。手続を抜けると写しのほうは捨てられますので、呼んだ側の最初の変数は 2 のままです。二行目の右辺をいつの値で計算するか、という点がこの問の分かれ目です。

ほかの選択肢はなぜ違うのか

出典:平成25年度 春期 応用情報技術者試験 午前 問20

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)