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.
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.