戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

応用情報技術者 2016年 春期 午前220


問題文

メインプログラムを実行した後、メインプログラムの変数X, Yの値は幾つになるか。ここで、仮引数Xは値呼出し (call by value)、仮引数 Yは参照呼出し (call by reference)であるとする。
応用情報技術者 2016年 春期 午前2 問20の問題画像応用情報技術者 2016年 春期 午前2 問20の選択肢の画像

選択肢

(正解)

🔒 解説は解答すると表示されます

値渡しと参照渡しの違い【午前2解説】

正解の理由

手続きaddの仮引数Xは値呼出しなので、メインプログラムのXの値は変更されません。一方、仮引数Yは参照呼出しなので、add内でのYの変更はメインプログラムのYに反映されます。計算過程は以下の通りです。
  1. メインプログラムのX=2、Y=2
  2. add呼出し時、仮引数Xに2(値渡し)、仮引数YにメインのYの参照が渡る
  3. add内でX = X + Y → X = 2 + 2 = 4(仮引数Xのみ変更)
  4. add内でY = X + Y → Y = 4 + 2 = 6(参照渡しのためメインのYが6に更新)
  5. add終了後、メインのXは変更なしで2、Yは6になる
したがって、正解は(X=2、Y=6)です。

解法ステップ

  1. メインプログラムの変数X, Yの初期値を確認する(X=2、Y=2)。
  2. 仮引数Xは値呼出し、Yは参照呼出しであることを理解する。
  3. add手続き内の処理を順に追う。
  4. X = X + Y の計算は仮引数Xにのみ影響し、メインのXは変わらない。
  5. Y = X + Y の計算は参照渡しのためメインのYに反映される。
  6. 最終的なメインプログラムのX, Yの値を答える。

選択肢別の誤答解説

  • ア(X=2、Y=4):Yの更新計算を誤り、Y=6になるべきところを4とした。
  • イ(X=2、Y=6):正解。値呼出しと参照呼出しの違いを正しく理解。
  • ウ(X=4、Y=2):値呼出しのXが変わると誤解し、参照呼出しのYが変わらないと誤認。
  • エ(X=4、Y=6):Xも参照渡しと誤解し、両方の値が変わると考えた誤答。

よくある誤解

値呼出しでも元の変数が変わると思い込むことが多いです。参照呼出しと値呼出しの違いを混同すると誤答につながります。

補足コラム

値呼出し(call by value)は引数の値をコピーして渡すため、手続き内での変更は呼び出し元に影響しません。一方、参照呼出し(call by reference)は引数の実体を渡すため、手続き内の変更が呼び出し元の変数に反映されます。プログラミング言語によって呼出し方法は異なり、C言語は基本的に値渡しですがポインタで参照渡しを実現します。理解はプログラムの副作用を予測する上で不可欠です。

FAQ

Q: 値呼出しと参照呼出しの違いは何ですか?
A: 値呼出しは引数の値をコピーして渡すため、手続き内の変更は呼び出し元に影響しません。参照呼出しは引数の実体を渡すため、手続き内の変更が呼び出し元に反映されます。
Q: なぜXは手続き内で変わってもメインプログラムのXは変わらないのですか?
A: Xは値呼出しなので、手続き内での変更はコピーに対して行われ、元の変数には影響しないためです。

関連キーワード: 値呼出し、参照呼出し、引数渡し、プログラムの副作用、変数のスコープ
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について