引数の受渡し(値呼出し・参照呼出し・結果呼出し・名前呼出し)とは?ひきすうのうけわたし
引数の受渡し(値呼出し・参照呼出し・結果呼出し・名前呼出し)とは、呼出し側の実引数を副プログラムの仮引数へ対応づける方式の分類。値呼出しは値の複製を渡すので呼出し側の変数は変わらず、参照呼出しはアドレスを渡すため実行中から書換えが及ぶ。結果呼出しは複製で作業して終了時に書き戻し、名前呼出しは式そのものを渡して参照のたびに評価し直す。
最終更新:2026-10-06
この語が出る過去問を解く →背景
処理を副プログラムへ切り出す狙いは、呼出し側が中身を気にせず使えるようにすることである。ところが渡し方によっては、呼び出した結果として自分の変数が書き換わる副作用が生じ、その前提が崩れる。どの方式かを言語仕様として明示するのは、呼出し側が「渡した変数は無事か」を判断できるようにするためで、科目Aではその判断そのものが問われる。
具体例
C言語は値呼出ししか持たないため、呼出し側の変数を書き換えたいときはアドレスを値として渡す(ポインタ渡し)。C++やC#は参照呼出しを構文として備えており、大きな構造体を複製せずに渡しつつ書換えは禁じたい場合に const や in を付ける、という使い分けをする。
試験での引っ掛け
実行後に呼出し側の変数が変わらないと保証できるのは値呼出しだけである。結果呼出しは終了時に書き戻り、参照呼出しは実行中から変わり、名前呼出しは評価のたびに副作用が及びうる。「参照渡しは複製しないから速くて安全」という、速度と安全性を混ぜた説明も定番の誤りになる。
関連用語
出た過去問
出典:平成28年度 春期 応用情報技術者試験 午前 問20(IPA)
メインプログラムを実行した後,メインプログラムの変数X,Yの値は幾つになるか。ここで,仮引数Xは値呼出し(call by value),仮引数Yは参照呼出し(c…
正解:X=2, Y=6
要点:値呼出しは呼出し側に反映されず参照呼出しは反映される
値呼出しの仮引数への代入は呼出し側に反映されないため、主プログラムのXは2のまま。参照呼出しのYは手続内の代入がそのまま反映される。手続内ではX=2+2=4、続いてY=4+2=6となるので、Yは6になる。
出典・参考
公式シラバスの1 基礎理論 > 4. プログラム言語 > (2) プログラム言語の制御構造に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。