Unterschied zwischen Call by Value und Call by Reference

Inhaltsverzeichnis:

Anonim

In Programmiersprachen können Funktionen auf zwei Arten aufgerufen werden: Call by Value und Call by Reference.

In diesem Tutorial lernen Sie:

  • Was ist eine Call-by-Value-Methode?
  • Was ist die Call by Reference-Methode?
  • Beispiel für eine Call-by-Value-Methode
  • Beispiel eines Aufrufs nach Referenzmethode
  • Call by Value vs. Call by Reference
  • Vorteile der Verwendung der Call-by-Value-Methode
  • Vorteile der Verwendung der Call by Reference-Methode
  • Nachteile der Verwendung der Call-by-Value-Methode
  • Nachteile der Verwendung der Call by Reference-Methode

Was ist die Call by Value-Methode?

Die Call-by-Value-Methode kopiert den Wert eines Arguments in den formalen Parameter dieser Funktion. Änderungen am Parameter der Hauptfunktion wirken sich daher nicht auf das Argument aus.

Bei dieser Parameterübergabemethode werden Werte der tatsächlichen Parameter in die formalen Parameter der Funktion kopiert und die Parameter an verschiedenen Speicherorten gespeichert. Innerhalb von Funktionen vorgenommene Änderungen spiegeln sich also nicht in den tatsächlichen Parametern des Aufrufers wider.

SCHLÜSSELUNTERSCHIED

  • Bei der Call-by-Value-Methode wird der ursprüngliche Wert nicht geändert, während bei der Call-by-Reference-Methode der ursprüngliche Wert geändert wird.
  • In Call by value wird eine Kopie der Variablen übergeben, während in Call by reference eine Variable selbst übergeben wird.
  • In Call by Value werden tatsächliche und formale Argumente an verschiedenen Speicherorten erstellt, während in Call by Reference tatsächliche und formale Argumente an demselben Speicherort erstellt werden.
  • Call by Value ist die Standardmethode in Programmiersprachen wie C ++, PHP, Visual Basic NET und C #, während Call by Reference nur die Java-Sprache unterstützt.
  • Call by Value, Variablen werden mit einer einfachen Methode übergeben, während Call by Reference-Zeiger erforderlich sind, um die Adresse von Variablen zu speichern.

Was ist die Call by Reference-Methode?

Call-by-Reference-Methode kopiert die Adresse eines Arguments in den formalen Parameter. Bei dieser Methode wird die Adresse verwendet, um auf das tatsächliche Argument zuzugreifen, das im Funktionsaufruf verwendet wird. Dies bedeutet, dass Änderungen am Parameter das übergebene Argument ändern.

Bei dieser Methode entspricht die Speicherzuordnung den tatsächlichen Parametern. Alle Operationen in der Funktion werden an dem Wert ausgeführt, der an der Adresse des Aktualparameters gespeichert ist, und der geänderte Wert wird an derselben Adresse gespeichert.

Beispiel einer Call by Value-Methode

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;}

Ausgabe:

before function calling 10value is 11after function calling 1-0

Weil sich die als 'a'in main () deklarierte Variable von der Variablen' x 'in increment () unterscheidet. In diesem Programm sind nur Variablennamen ähnlich, aber ihre Speicheradresse ist unterschiedlich und wird an verschiedenen Speicherorten gespeichert.

Beispiel für eine Call by Reference-Methode

Public static void(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;}

Ausgabe:

Before call Value of a =10After call Value of a =11

Weil die als 'a' deklarierte Variable in main () auf die Variable 'a' verweist / darauf verweist. Hier ist der Variablenname unterschiedlich, aber beide zeigen / verweisen auf dieselben Speicheradresspositionen.

Call by Value vs. Call by Reference

Parameter Call by value Rufen Sie als Referenz an
Definition Wenn Sie beim Aufrufen einer Funktion Werte durch Kopieren von Variablen übergeben, wird dies als "Aufrufen nach Werten" bezeichnet. Beim Aufrufen einer Funktion wird in der Programmiersprache anstelle des Kopierens der Variablenwerte die Adresse der Variablen verwendet, die als "Call By References" bezeichnet wird.
Argumente Bei dieser Methode wird eine Kopie der Variablen übergeben. Bei dieser Methode wird eine Variable selbst übergeben.
Bewirken Änderungen, die an einer Kopie der Variablen vorgenommen werden, ändern niemals den Wert der Variablen außerhalb der Funktion. Eine Änderung der Variablen wirkt sich auch auf den Wert der Variablen außerhalb der Funktion aus.
Wertänderung Ermöglicht keine Änderungen an den tatsächlichen Variablen. Ermöglicht das Ändern von Variablenwerten mithilfe von Funktionsaufrufen.
Übergabe der Variablen Werte von Variablen werden mit einer einfachen Methode übergeben. Zeigervariablen sind erforderlich, um die Adresse von Variablen zu speichern.
Wertänderung Ursprünglicher Wert nicht geändert. Der ursprüngliche Wert wird geändert.
Speicherort Tatsächliche und formale Argumente werden an verschiedenen Speicherorten erstellt Tatsächliche und formale Argumente werden am selben Speicherort erstellt
Sicherheit Tatsächliche Argumente bleiben sicher, da sie nicht versehentlich geändert werden können. Tatsächliche Argumente sind nicht sicher. Sie können versehentlich geändert werden, daher müssen Sie Argumentoperationen sorgfältig behandeln.
Standard Standard in vielen Programmiersprachen wie C ++. PHP. Visual Basic NET und C #. Es wird von den meisten Programmiersprachen wie JAVA unterstützt, jedoch nicht standardmäßig.

Vorteile der Verwendung der Call-by-Value-Methode

Vorteile / Nutzen einer Call-by-Value-Methode:

  • Die Methode ändert die ursprüngliche Variable nicht, sodass Daten erhalten bleiben.
  • Wenn eine Funktion aufgerufen wird, wirkt sich dies niemals auf den tatsächlichen Inhalt der tatsächlichen Argumente aus.
  • Der Wert der tatsächlichen Argumente, die an die formalen Argumente übergeben werden, sodass Änderungen am formalen Argument keine Auswirkungen auf die tatsächlichen Fälle haben.

Vorteile der Verwendung der Call by Reference-Methode

Vorteile der Verwendung der Call-by-Reference-Methode:

  • Die Funktion kann den Wert des Arguments ändern, was sehr nützlich ist.
  • Es werden keine doppelten Daten für nur einen Wert erstellt, wodurch Sie Speicherplatz sparen können.
  • Bei dieser Methode wird keine Kopie des vorgebrachten Arguments erstellt. Daher wird es sehr schnell verarbeitet.
  • Hilft Ihnen, versehentlich vorgenommene Änderungen zu vermeiden
  • Eine Person, die den Code liest, weiß nie, dass der Wert in der Funktion geändert werden kann.

Nachteile der Verwendung der Call-by-Value-Methode

Hier sind die Hauptnachteile / -nachteile einer Call-by-Value-Methode:

  • Änderungen an Aktualparametern können auch entsprechende Argumentvariablen ändern
  • Bei dieser Methode müssen Argumente Variablen sein.
  • Sie können eine Variable in einem Funktionskörper nicht direkt ändern.
  • Manchmal können Argumente komplexe Ausdrücke sein
  • Es werden zwei Kopien für dieselbe Variable erstellt, die nicht speichereffizient sind.

Nachteile der Verwendung der Call by Reference-Methode

Hier sind die wichtigsten Nachteile der Verwendung der Call-by-Reference-Methode:

  • Starke Nicht-Null-Garantie. Eine Funktion, die eine Referenz aufnimmt, muss sicherstellen, dass die Eingabe nicht Null ist. Daher muss keine Nullprüfung durchgeführt werden.
  • Das Übergeben als Referenz macht die Funktion theoretisch nicht rein.
  • Eine lebenslange Garantie ist ein großes Problem mit Referenzen. Dies ist besonders gefährlich, wenn Sie mit Lambdas und Multithread-Programmen arbeiten.