引数の受渡し(値呼出し・参照呼出し・結果呼出し・名前呼出し)とは?ひきすうのうけわたし
引数の受渡し(値呼出し・参照呼出し・結果呼出し・名前呼出し)とは、呼出し側の実引数を、副プログラムの仮引数へどう対応づけるかの方式。値呼出しは値の複製を渡し、参照呼出しは格納位置を渡す。結果呼出しは複製で処理して終了時に書き戻し、名前呼出しは式そのものを渡して使うたびに評価する。呼出し側の変数がいつ変わるかが、この4つを分ける軸になる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
副プログラムに切り出す目的は、内部の都合を呼出し側から切り離すことにある。しかし完全に切り離すと結果を返せず、逆に格納位置を共有すれば副作用が漏れる。この矛盾のどこで折り合うかが方式の違いになった。組込みでは複製の費用がスタック消費と実行時間に直結し、割込みハンドラでは再入可能性にも効くため、選択が性能と安全の両方を決める。
具体例
配列の合計を求めるだけの関数に値呼出しを使えば、要素数ぶんの複製がスタックに載る。Cが持つのは値呼出しだけなので、実務ではアドレスを値として渡し、書き換えない意図を const int * のように型で示す。C++の参照やFortranの既定は参照呼出しにあたり、呼出し側の変数がそのまま書き換わる。
試験での引っ掛け
実行後に呼出し側の変数が変わらないと保証できるのは値呼出しだけである。結果呼出しは終了時に書き戻して変わり、参照呼出しは実行中から変わり、名前呼出しは評価のたびに副作用が及ぶ。「参照渡しは複製しないので速く、だから安全」という速度と安全性の取り違えも定番で、速いことと副作用が無いことは無関係。
関連用語
出た過去問
出典:平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問24(IPA)
サブルーチンへの引数の受渡し方のうち、引数として渡した変数の値が、サブルーチンの実行後に変更されないことが保証されているものはどれか。
正解:値呼出し
要点:値呼出しはコピーを渡すので呼出し側の値は変わらない
値呼出し(call by value)では、実引数の値がコピーされて仮引数に渡されるため、サブルーチン内で仮引数を書き換えても呼出し側の変数には影響しない。参照呼出しでは変数そのものの位置が渡るので呼出し側の値が変わり、結果呼出しでは終了時に値が書き戻される。名前呼出しは実引数の式がそのまま評価されるため、こちらも呼出し側の値が変わりうる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。