C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での値渡しと参照渡しの違い


C ++では、さまざまな方法で引数を関数に渡すことができます。これらのさまざまな方法は-

です
  • 値による呼び出し
  • 参照による呼び出し
  • 住所による電話

アドレスによる呼び出しは参照による呼び出しと呼ばれることもありますが、C++では異なります。アドレスによる呼び出しでは、ポインター変数を使用して正確なメモリアドレスを送信しますが、参照による呼び出しでは、参照変数(その変数のエイリアス)を渡します。この機能はCには存在しません。その効果を得るには、ポインターを渡す必要があります。このセクションでは、値による呼び出しよりも参照による呼び出しの利点と、それらを使用する場所について説明します。

値による呼び出し

値による呼び出しでは、引数として渡される実際の値は、何らかの操作を実行した後も変更されません。値による呼び出しを使用すると、その変数のコピーがメモリのスタックセクションに作成されます。値が変更されると、そのコピーの値が変更され、実際の値は同じままです。

サンプルコード

#include<iostream>
using namespace std;

void my_function(int x) {
   x = 50;
   cout << "Value of x from my_function: " << x << endl;
}

main() {
   int x = 10;
   my_function(x);
   cout << "Value of x from main function: " << x;
}

出力

Value of x from my_function: 50
Value of x from main function: 10

参照による呼び出し

参照による呼び出しでは、引数として渡される実際の値は、何らかの操作を実行した後に変更されます。参照による呼び出しを使用すると、その変数の参照のコピーがメモリのスタックセクションに作成されます。参照を使用して値を取得します。したがって、参照を使用して値を変更すると、実際の変数の値が変更されます。

サンプルコード

#include<iostream>
using namespace std;

void my_function(int &x) {
   x = 50;
   cout << "Value of x from my_function: " << x << endl;
}

main() {
   int x = 10;
   my_function(x);
   cout << "Value of x from main function: " << x;
}

出力

Value of x from my_function: 50
Value of x from main function: 50

参照による通話はどこで使用しますか?

  • 参照による呼び出しは、主に、渡された引数の値を呼び出し元関数に変更する場合に使用されます。

  • 1つの関数が返すことができる値は1つだけです。関数から複数の値が必要な場合は、この方法でそれらを出力引数として渡すことができます。


  1. C ++とC#の違い

    C ++は、静的に型付けされ、コンパイルされた、汎用の、大文字と小文字を区別する、自由形式のプログラミング言語であり、手続き型、オブジェクト指向、およびジェネリックプログラミングをサポートします。 C ++は、高水準言語と低水準言語の両方の機能の組み合わせで構成されているため、中水準言語と見なされます。 C#は、アンダース・ヘルスバーグが主導する.NETイニシアチブ内でMicrosoftが開発した、シンプルでモダンな汎用のオブジェクト指向プログラミング言語です。 以下は、C ++とC#の違いです。 メモリ管理 C ++には手動のメモリ管理がありますが、メモリ管理はC#で自動的に処理され

  2. C#の値渡しと参照パラメーターの違いは何ですか?

    参照パラメータ 参照パラメータは、変数のメモリ位置への参照です。参照パラメータは、メソッドに提供される実際のパラメータと同じメモリ位置を表します。 値パラメーターとは異なり、参照によってパラメーターを渡す場合、これらのパラメーターの新しい保管場所は作成されません。 値渡し これは、パラメータをメソッドに渡すためのデフォルトのメカニズムです。このメカニズムでは、メソッドが呼び出されると、値パラメーターごとに新しい保存場所が作成されます。 実際のパラメータの値がそれらにコピーされます。したがって、メソッド内のパラメーターに加えられた変更は、引数に影響を与えません。