値による呼び出しと参照による呼び出しの違い
値による呼び出しと参照による呼び出しの主な違い
- 値による呼び出しメソッドでは元の値は変更されませんが、参照による呼び出しメソッドでは元の値が変更されます。
- 値による呼び出しでは変数のコピーが渡されますが、参照による呼び出しでは変数自体が渡されます。
- 値による呼び出しでは、実引数と仮引数は異なるメモリ場所に作成されますが、参照による呼び出しでは、実引数と仮引数は同じメモリ場所に作成されます。
- 値渡しは、次のようなプログラミング言語のデフォルトの方法です。 C++、PHP、Visual Basic NET、C#でのみサポートされていますが、参照渡しは Java 言語。
- 値による呼び出し変数は直接的な方法を使用して渡されますが、参照による呼び出しは変数のアドレスを格納するためにポインターが必要です。
プログラミング言語では、関数は XNUMX つの方法で呼び出すことができます。これは、値による呼び出しと参照による呼び出しとして知られています。
値による呼び出し方式とは何ですか?
値による呼び出しメソッドは、引数の値をその関数の仮パラメータにコピーします。 したがって、main 関数のパラメーターを変更しても引数には影響しません。
このパラメーター受け渡し方法では、実パラメーターの値が関数の仮パラメーターにコピーされ、パラメーターは別のメモリー位置に保管されます。 したがって、関数内で行われた変更は呼び出し元の実際のパラメーターには反映されません。
Call by Reference方式とは何ですか?
参照による呼び出しメソッドは、引数のアドレスを仮パラメータにコピーします。 このメソッドでは、アドレスは関数呼び出しで使用される実際の引数にアクセスするために使用されます。 これは、パラメーターに加えられた変更により、渡される引数が変更されることを意味します。
この方法では、メモリの割り当ては実際のパラメータと同じです。関数内のすべての操作は、実際のパラメータのアドレスに格納されている値に対して実行され、変更された値は同じアドレスに格納されます。
値による呼び出しメソッドの C コード例
void main() { int a = 10, void increment(int); Cout << "before function calling" << a; increment(a); Cout << "after function calling" << a; getch(); void increment(int x) { int x = x + 1; Cout << "value is" << x; }
出力:
before function calling 10 value is 11 after function calling 1-0
main() で宣言された変数 'a' は、increment() の変数 'x' とは異なるためです。 このプログラムでは、変数名のみが似ていますが、メモリ アドレスが異なり、異なるメモリ位置に格納されます。
Java 参照呼び出しメソッドのコード例
Public static void main(string args[]) { int a = 10; System.out.println("Before call Value of a = ", a); Void increment(); System.out.println("After call Value of a = ", a); } Void increment(int x) { int x = x + 1; }
出力:
Before call Value of a =10 After call Value of a =11
で宣言された変数 'a' が main() の変数 'a' を参照/指しているためです。 ここでは変数名が異なりますが、どちらも同じメモリ アドレスの場所を指している/参照しています。
値による呼び出しと参照による呼び出し
Parameters | 値による呼び出し | 参照で呼び出す |
---|---|---|
定義 | 関数の呼び出し中に、変数をコピーして値を渡すことを「値による呼び出し」といいます。 | 関数を呼び出す際、プログラミング言語では、変数の値をコピーする代わりに、変数のアドレスが使用されます。これは「参照による呼び出し」として知られています。 |
Arguments | このメソッドでは、変数のコピーが渡されます。 | このメソッドでは、変数そのものが渡されます。 |
効果 | 変数のコピーに変更を加えても、関数の外で変数の値が変更されることはありません。 | 変数の変更は、関数の外の変数の値にも影響します。 |
価値の変更 | 実際の変数を変更することはできません。 | 関数呼び出しを使用して変数の値を変更できます。 |
変数の受け渡し | 変数の値は、単純な方法を使用して渡されます。 | ポインタ変数は変数のアドレスを格納するために必要です。 |
値の変更 | 元の値は変更されません。 | 元の値が変更されます。 |
メモリの場所 | 実際の引数と形式的な引数 別の場所で作成されます 記憶の場所 |
実際の引数と形式的な引数 同じように作成されます 記憶の場所 |
安全性 | 実際の引数は残ります 変更できないので安全です 誤って。 |
実際の引数はそうではありません 安全。 それらは可能です 誤って変更される可能性があるため、引数の操作は慎重に処理する必要があります。 |
デフォルト | 多くのプログラミングのデフォルト 次のような言語 C++.PHP、Visual Basic NET、C#。 |
ほとんどの人に支持されています JAVAのようなプログラミング言語ですが、 デフォルトではありません。 |
C で値による呼び出しメソッドを使用する利点
C での値による呼び出しの長所/利点:
- このメソッドは元の変数を変更しないため、データが保持されます。
- 関数が呼び出されるときは、実際の引数の実際の内容には決して影響を与えないでください。
- 実引数の値は仮引数に渡されるため、仮引数で行われた変更は実際のケースには影響しません。
参照による呼び出し方法を使用する利点
参照による呼び出し方法を使用する利点:
- この関数は引数の値を変更できるため、非常に便利です。
- XNUMX つの値だけを保持するために重複データが作成されないため、メモリ領域の節約に役立ちます。
- このメソッドでは、引数のコピーは作成されません。 したがって、非常に高速に処理されます。
- 誤って行われた変更を避けるのに役立ちます
- コードを読む人は、関数内で値を変更できることを知りません。
値による呼び出し方法を使用するデメリット
値による呼び出し方法の主な短所/欠点は次のとおりです。
- 実際のパラメータを変更すると、対応する引数変数も変更される可能性があります
- このメソッドでは、引数は変数である必要があります。
- 関数本体内の変数を直接変更することはできません。
- 時には複雑な表現になることもある
- 同じ変数に対して XNUMX つのコピーが作成されるため、メモリ効率が悪くなります。
参照による呼び出し方法を使用するデメリット
参照による呼び出し方法を使用する主な欠点を次に示します。
- 強力な非 null 保証。参照を受け取る関数は、入力が非 null であることを確認する必要があります。したがって、null チェックを行う必要はありません。
- 参照渡しでは、理論的には関数が純粋ではなくなります。
- 永久保証はリファレンスにとって大きな問題です。 これは、ラムダやマルチスレッド プログラムを操作する場合に特に危険です。