IPA過去問ドリル

平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問24

テクノロジ/基礎理論

サブルーチンへの引数の受渡し方のうち,引数として渡した変数の値が,サブルーチンの実行後に変更されないことが保証されているものはどれか。

出典:平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問24

正解:ア

解説

値呼出し(call by value)は,呼び出し元の変数の値を,サブルーチン(関数)側の仮引数にコピーして渡す方式です。サブルーチン内では,コピーされた仮引数の値を変更しても,呼び出し元の実引数(元の変数)には一切影響が及ばないため,実引数の値がサブルーチンの実行後に変更されないことが保証されます。これに対し,結果呼出し,参照呼出し,名前呼出しは,いずれも何らかの形で呼び出し元の変数と結び付いており,サブルーチン内での操作によって呼び出し元の変数の値が変更される可能性があります。

選択肢ごとの解説

  • 正しい。値呼出しは実引数の値を仮引数にコピーして渡す方式であり,サブルーチン内で仮引数を変更しても呼び出し元の実引数には影響しないため,実引数の値が変更されないことが保証されます。
  • 誤り。結果呼出し(call by result)は,サブルーチンの実行結果(仮引数の最終的な値)を,終了時に呼び出し元の実引数へ書き戻す方式であり,実引数の値がサブルーチンの実行後に変更されます。
  • 誤り。参照呼出し(call by reference)は,実引数そのものの参照(アドレス)を渡す方式であり,サブルーチン内での仮引数への操作がそのまま呼び出し元の実引数に反映されるため,値が変更される可能性があります。
  • 誤り。名前呼出し(call by name)は,実引数の式そのものを,参照される都度評価する方式であり,サブルーチン内での代入操作が呼び出し元の変数に影響を与える可能性があります。
エンベデッドシステムスペシャリストの過去問を演習モードで解く