Was ist Call-by-Value und Call-by-Reference?

2 Antworten


  • Es gibt zwei Möglichkeiten, Argumente/Parameter an eine Funktion zu übergeben. Eine Methode ist Call by Value und die andere Methode ist Call by Reference.
    Call by Value: Beim Call by Value sendet die Programmierung die Kopie eines Arguments/Parameters an eine Funktion. Der Programmierer übergibt die tatsächliche Variable nicht. Da nur die Kopie der Variablen an die Funktion übergeben wird, wirken sich Änderungen/Modifikationen innerhalb einer Funktion nicht auf die Variable aus und der Variablenwert bleibt nach dem Funktionsaufruf gleich.
    Das folgende Beispiel wird es verdeutlichen;
    Angenommen a = 2 vor dem Funktionsaufruf
    Void-Funktion (int a)
    {
    a = a + a;
    a = a – 5;
    }
    Da nur eine Kopie der Variablen "a" an die Funktion übergeben wird, bleibt der Wert von a auch nach dem Funktionsaufruf 2 erhalten.
    Call by Reference: Beim Aufruf von Reference wird die Adresse des Arguments/Parameters an die Funktion übergeben. In einfachen Worten wird die eigentliche Variable oder ein Zeiger an die Funktion übergeben und der Variablenwert kann innerhalb einer Funktion geändert/modifiziert werden.
    Zum Beispiel; Angenommen a = 2 vor Funktionsaufruf
    Nachdem dieser Wert an eine Funktion wie
    Void übergeben wurde function(int &a)
    {
    *a = *a + *a;
    *a = *a – 5;
    }
    Der Wert von a wird "1", nachdem diese Funktion aufgerufen wurde.
  • Die an function übergebenen Argumente können von zwei Typen sein, nämlich

    1. Übergebene Werte
    2. Übergebene Adresse

    Der erste Typ bezieht sich auf den Aufruf nach Wert und der zweite Typ bezieht sich auf den Aufruf nach Referenz.

    Betrachten Sie zum Beispiel program1

    main()
    {
    int x=50, y=70;
    Austausch(x,y);
    printf(“x=%dy=%d”,x,y);
    }

    Austausch(x1,y1)
    int x1,y1;
    {
    int z1;
    z1=x1;
    x1=y1;
    y1=z1;
    printf(“x1=%d y1=%d”,x1,y1);
    }

    Hier wird der Wert zum Funktionsaustausch als Wert übergeben.

    Betrachten Sie program2

    main()
    {
    int x=50, y=70;
    Austausch(&x,&y);
    printf(“x=%dy=%d”,x,y);
    }

    Austausch(x1,y1)
    int *x1,*y1;
    {
    int z1;
    z1=*x1;
    *x1=*y1;
    *y1=z1;
    printf(“*x=%d *y=%d”,x1,y1);
    }

    Hier wird die Funktion per Referenz aufgerufen. Mit anderen Worten, die Adresse wird mit dem Symbol & übergeben und auf den Wert wird mit dem Symbol * zugegriffen.

    Der Hauptunterschied zwischen ihnen kann durch die Analyse der Ausgabe von Programm1 und Programm2 erkannt werden.

    Die Ausgabe von program1, die nach Wert aufgerufen wird, ist

    x1=70 y1=50
    x=50 y=70

    Aber die Ausgabe von program2, die durch Referenz aufgerufen wird, ist

    *x=70 *y=50
    x=70 y=50

    Dies liegt daran, dass der Wert im Fall eines Aufrufs nach Wert an eine Funktion namens Interchange übergeben wird und dort wurde der Wert vertauscht und als

    x1=70 y1=50 ausgegeben

    und wieder da keine Werte zurückgegeben werden und daher die ursprünglichen Werte von x und y wie in der Hauptfunktion nämlich

    x=50 y=70 gedruckt wurden.

Schreibe deine Antwort

Ihre Antwort erscheint nach der Moderation appear