Unterschied zwischen Call by Value und Call by Reference

Hauptunterschied zwischen Call by Value und Call by Reference

  • Bei der Call-by-Value-Methode wird der Originalwert nicht geändert, während bei der Call-by-Reference-Methode der Originalwert geändert wird.
  • Bei Call by Value wird eine Kopie der Variablen übergeben, während bei Call by Reference eine Variable selbst übergeben wird.
  • Bei Call-by-Value werden tatsächliche und formale Argumente an verschiedenen Speicherorten erstellt, während bei 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 in Java Sprache.
  • Call-by-Value-Variablen werden mit einer einfachen Methode übergeben, wohingegen Call-by-Reference-Zeiger erforderlich sind, um die Adresse von Variablen zu speichern.

Unterschied zwischen Call by Value und Call by Reference

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

Was ist die Call-by-Value-Methode?

Die Call-by-Value-Methode kopiert den Wert eines Arguments in den formalen Parameter dieser Funktion. Daher haben Änderungen am Parameter der Hauptfunktion keinen Einfluss auf das Argument.

Bei dieser Parameterübergabemethode werden Werte tatsächlicher Parameter in die formalen Parameter der Funktion kopiert und die Parameter an verschiedenen Speicherorten gespeichert. Daher werden alle innerhalb von Funktionen vorgenommenen Änderungen nicht in den tatsächlichen Parametern des Aufrufers widergespiegelt.

Was ist die Call-by-Reference-Methode?

Die Call-by-Reference-Methode kopiert die Adresse eines Arguments in den formalen Parameter. Bei dieser Methode wird die Adresse verwendet, um auf das eigentliche Argument zuzugreifen, das im Funktionsaufruf verwendet wird. Das bedeutet, dass am Parameter vorgenommene Änderungen das übergebende Argument verändern.

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

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

Ausgang:

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

Weil sich die in main() deklarierte Variable „a“ von der Variablen „x“ in inkrement() unterscheidet. In diesem Programm sind nur die Variablennamen ähnlich, aber ihre Speicheradressen sind unterschiedlich und werden an unterschiedlichen Speicherorten gespeichert.

Java Codebeispiel für eine Call by Reference-Methode

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

Ausgang:

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

Weil die in „a“ deklarierte Variable in main() auf die Variable „a“ verweist/zeigt. Hier ist der Variablenname unterschiedlich, aber beide zeigen/verweisen auf dieselben Speicheradressen.

Call by Value vs. Call by Reference

Kenngrößen Anruf nach Wert Rufen Sie als Referenz an
Definition Wenn Sie beim Aufrufen einer Funktion Werte durch Kopieren von Variablen übergeben, spricht man von „Call By Values“. Beim Aufrufen einer Funktion wird in der Programmiersprache die Adresse der Variablen verwendet, anstatt die Werte von Variablen zu kopieren. Dies wird als „Call By References“ bezeichnet.
Argumente Bei dieser Methode wird eine Kopie der Variablen übergeben. Bei dieser Methode wird eine Variable selbst übergeben.
Ergebnisse Änderungen, die in einer Kopie der Variablen vorgenommen werden, verä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 Ihnen, mithilfe von Funktionsaufrufen Änderungen an den Werten von Variablen vorzunehmen.
Übergabe einer Variablen Werte von Variablen werden mit einer einfachen Methode übergeben. Zeigervariablen werden benötigt, 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
wird in verschiedenen erstellt
Speicherort
Tatsächliche und formale Argumente
wird im selben erstellt
Speicherort
Schutz vor Bedrohungen Die eigentlichen Argumente bleiben bestehen
sicher, da sie nicht verändert werden können
versehentlich.
Tatsächliche Argumente sind es nicht
Sicher. Sie können sein
versehentlich geändert, daher müssen Sie mit Argumentoperationen sorgfältig umgehen.
Standard Standard in vielen Programmen
Sprachen wie C++.PHP. Visual Basic .NET und C#.
Es wird von den meisten unterstützt
Programmiersprachen wie JAVA, aber
nicht als Standard.

Vorteile der Verwendung der Call-by-Value-Methode in C

Vorteile/Vorteile eines Call-by-Value in C:

  • Die Methode ändert die ursprüngliche Variable nicht, sodass die Daten erhalten bleiben.
  • Wann immer eine Funktion aufgerufen wird, hat sie niemals Auswirkungen auf den tatsächlichen Inhalt der tatsächlichen Argumente.
  • Der Wert der tatsächlichen Argumente wird an die formalen Argumente übergeben, sodass Änderungen am formalen Argument keine Auswirkungen auf die realen 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 erstellt, die nur einen Wert enthalten, wodurch Sie Speicherplatz sparen können.
  • Bei dieser Methode gibt es keine Kopie des Arguments. Daher erfolgt die Bearbeitung sehr schnell.
  • 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 wichtigsten Nachteile/Nachteile einer Call-by-Value-Methode:

  • Durch Änderungen an tatsächlichen Parametern können auch entsprechende Argumentvariablen geändert werden
  • 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, was nicht speichereffizient ist.

Nachteile der Verwendung der Call-by-Reference-Methode

Hier sind die Hauptnachteile 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.
  • Durch die Referenzübergabe ist die Funktion nicht rein theoretisch.
  • Eine lebenslange Garantie ist bei Referenzen ein großes Thema. Dies ist besonders gefährlich, wenn mit Lambdas und Multithread-Programmen gearbeitet wird.