引数の受渡し(値呼出し・参照呼出し・結果呼出し・名前呼出し)とは?ひきすうのうけわたし
引数の受渡し(値呼出し・参照呼出し・結果呼出し・名前呼出し)とは、サブルーチンの仮引数へ実引数をどう対応づけるかの規約。違いは呼出し側の変数がいつ変わるかに集約され、値呼出しは複製を渡すので変わらず、参照呼出しは記憶位置を渡すので実行中から変わり、結果呼出しは複製で作業して復帰時に書き戻し、名前呼出しは式そのものを渡して参照のたびに評価する。
最終更新:2026-10-06
この語が出る過去問を解く →背景
高級言語がサブルーチンを持った時点で、呼出し側と呼出し先が同じ実体を見るのか別物を見るのかを決める必要が生じた。複製は副作用を封じられるが大きなデータでは時間と記憶を食い、共有は速いが呼出し先の変更が外へ漏れる。この対立の調停として複数の方式が並存している。システムアーキテクトでは、性能と副作用の抑制のどちらを優先するかという設計判断そのものであり、既存資産の保守でも方式の違いが実害になる。
具体例
C言語は値呼出しだけを持ち、呼出し側を書き換えたいときはポインタの値を渡す。C++はconst参照、C#はrefやoutで方式を宣言側に明示させる。大きな構造体は値で渡すと複製の費用が大きいため、実務では参照で渡したうえで変更禁止の指定を付ける形が使われる。
試験での引っ掛け
渡した変数の値が実行後に変更されないことが保証されるのは値呼出しだけである。結果呼出しは復帰時に書き戻すので変わり、参照呼出しは実行中から変わり、名前呼出しも評価のたびに副作用が及びうる。参照渡しは速いから安全という、性能と安全性を取り違えた選択肢も定番である。
関連用語
出た過去問
出典:令和3年度 春期 システムアーキテクト試験 午前Ⅱ 問8(IPA)
サブルーチンへの引数の受渡し方のうち、引数として渡した変数の値が、サブルーチンの実行後に変更されないことが保証されているものはどれか。
正解:値呼出し
要点:値呼出しは値の複製を渡すので呼出し元の変数は不変
値呼出し(call by value)は、実引数の値をコピーして仮引数に渡す方式である。サブルーチン側で仮引数を書き換えても呼出し元の変数には反映されないため、元の変数の値が変更されないことが保証される。参照や別名を渡す方式では、呼出し先の代入が呼出し元に及ぶ。
出典:令和7年度 春期 システムアーキテクト試験 午前Ⅱ 問9(IPA)
サブルーチンとの引数の受渡し方のうち,引数として渡した変数の値が,サブルーチンの実行後に変更されないことが保証されているものはどれか。
正解:値呼出し
要点:値呼出しは値の複製を渡すため元の変数は変わらない
値呼出し(call by value)は、実引数の値を複製して仮引数に渡す方式である。サブルーチン内で仮引数を書き換えても複製が変わるだけで、呼出し側の変数には影響しないため、実行後も元の値は変更されないことが保証される。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。