変数渡し
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/20 07:25 UTC 版)
変数渡し(へんすうわたし、call by variable)は、変数そのもの(左辺値)を渡す方法で、この場合は仮引数に対する操作がそのまま実引数(渡された変数)に影響する。多くの言語では(とくに配列のようなデータ構造を戻り値にできない場合)戻り値はひとつの値だけしか返せないが、データベース検索などで見つかったかどうかと、見つかったならその値も知らせるような場合に、見つかったかどうかを戻り値にして、検索結果の値は適当な引数を変更するといった使い方ができる。 参照渡し(さんしょうわたし、call by reference)はその実装手段の一つ(と見ることもできる)。変数に対する参照(アドレス情報)を渡す方法である(これは言語側が勝手に行う。C言語のように明示的にアドレス演算子を使うものは参照渡しとは呼ばない)。 その他、値渡しと同じようにコピーを渡しておいて、関数/サブルーチンからのリターン時に元の変数に変更結果をコピーしなおす方法もある(これは変数の共有(エイリアス)や再帰呼出しがあると奇妙な結果になることがある)。PL/Iでは、どちらの方法で実装しても良いと規定されている。 原始的な言語であるFORTRANは機械語のアドレス操作を反映した参照渡ししか持たなかった。これは特にcall by indexと呼ばれている。 他に変数渡しをサポートする言語としては、Pascal、Perl、C++、C#、Quick BASIC等の構造化BASICなどが挙げられる。 なお変数渡しの関数・サブルーチンに、実引数として変数以外(右辺値)を渡した場合にどうなるかは、言語によって異なる。そのような操作が禁止されており、エラーが発生する言語(Pascal等)、テンポラリな変数を作成し、リターン時にそれを捨ててしまうため、値渡しと同じことができる言語(Quick BASIC等)、「未定義の動作」をひきおこし、何が起こるか全く予測がつかない言語(FORTRAN等)がある。C++ではconst修飾されていない型への参照に右辺値を渡すとエラーになるが、const修飾されていれば一時オブジェクトが作成され、また右辺値のみを参照できる「右辺値参照」が存在する。
※この「変数渡し」の解説は、「引数」の解説の一部です。
「変数渡し」を含む「引数」の記事については、「引数」の概要を参照ください。
- 変数渡しのページへのリンク