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.