🙆‍♀️

【仮引数にデータを渡す方法】 値渡し・参照渡し

2024/10/05に公開
3

【前提】

仮引数にデータを渡す方法は、大きく分けると値渡しと参照渡しの2種類がある

  • 値渡し
    • (普通の)値渡し
    • 参照の値渡し(共有渡しとも呼ばれる)
  • 参照渡し

【値渡し】

  • 実引数の値のコピーが、仮引数に渡される方法
  • ほとんどの最新言語はこちら
  • 参照の値渡し
    • 値渡しでは変数に格納されている値が渡されるが、その値が「参照」を表している場合

【参照渡し】

  • 実引数の参照(例えばメモリアドレス)が、仮引数に渡される方法
  • 副作用あり
    • 仮引数を変更すると実引数も変更される
  • C++ と PHP は参照渡しも可能

【参考】

https://magazine.rubyist.net/articles/0032/0032-CallByValueAndCallByReference.html

Discussion

junerjuner

関数の実引数にオブジェクトを渡した場合

それは参照渡しとは関係ないのでは
(値渡しもできるので)
(オブジェクトが参照型だとすると先頭の参照値(どうせint)程度のコピーなので値渡しのほうが多い印象あります。)

417yr417yr

コメントいただきありがとうございます!確認します!

タートルタートル

参照渡しとは左辺値への参照を渡す手続きです
この記事の例だと、アドレスは右辺値なので手続き自体は値渡しになります

void func(int *a);
int b;
func(&b);

もしアドレスを参照渡しする場合は、アドレスが左辺値でなければならず、それはポインタへの参照を指します

void func(int *&a);
int *a=new int;
func(a);

参照にはこの他にもハンドラを渡す手続きがあります
これはオブジェクト指向言語で汎用的なインスタンスへの参照で運用されるロジックです

void func(Integer a);
Integer b=0;
func(b);