Funktionsaufruf in c (Call by Value und Call by Reference in C)

Funktionsaufruf in c

Pointer können in Funktionen als Argumente übergeben werden und dies wird über den Funktionsaufruf in C erreicht. Dies kann auf zwei Arten erfolgen, dh Call by Value und Call by Reference in C. Lassen Sie uns dieses Konzept mit Hilfe eines Programms verstehen.

Das Programm zielt darauf ab, zwei Zahlen zu tauschen.

Vertauschen bedeutet, wenn wir x=100 und y=200 haben, erhalten wir nach dem Vertauschen x=200 und y=100. Sehen wir uns an, wie Sie Code für solche Fälle schreiben.

Beispiel

#enthalten int swap (int *a, int *b) { int c; c=*a; *a=*b; *b=c; } int main () { int x, y; printf ("geben Sie die Werte von x und y ein:\n"); scanf ("%d %d", &x, &y); printf ("bevor Werte ausgetauscht werden:\nx=%d und y=%d\n", x, y); tauschen (&x, &y); printf ("nach dem Tauschen der Werte:\nx=%d und y=%d\n", x, y); 0 zurückgeben; }

 

Ausgabe

Funktionsaufruf in c

Code Erklärung

int-Swap (int *a, int *b) Die Funktion namens 'swap' hat zwei Parameter vom Typ 'int', aber diese Argumente sind die Zeiger. In der Funktionsdefinition müssen wir Zeiger verwenden, und beim Aufrufen dieser Funktion in 'main' müssen wir die Adresse von zwei ganzen Zahlen übergeben. Ein solcher Fall heißt „Anruf per Referenz”.

int c; Deklarieren einer temporären Variablen, um die Auslagerungsaufgabe auszuführen. c=*a;, Diese Anweisung weist 'c' den Wert '*a' zu, dh den Wert an der Adresse von 'a'. Das bedeutet, dass 'c' und '*a' die gleichen Werte wie '*a' haben, was 45 ist.

c=45, *a=45

*a=*b; Jetzt wird '*b' '*a' zugewiesen, was bedeutet, dass der Wert von '*b' und '*a' gleich '*b' ist. Hier wird der Wert von '*a' auf 98 geändert.

*a=98, *b=98

*b=c; Diese Anweisung ändert den Wert von '*b' gleich 'c'. Daher,

*b=45

Die Anfangswerte von '*a' und '*b' waren 45 bzw. 98, aber nach dem Ausführen des obigen Codes werden die Werte von '*a' und '*b' durch 98 bzw. 45 ersetzt.

Da wir diese Vertauschung mit Zeigern durchgeführt haben, wird dies auch auf die Adressen abzielen. Dadurch werden die Werte auch außerhalb der 'Swap'-Funktion vertauscht.

Aufruf per Referenz in C

Siehe den gleichen Code unten mit geringfügigen Änderungen.

#enthalten int swap (int *a, int *b) { int c; c=*a; *a=*b; *b=c; printf(“Ausgetauschte Werte in der Austauschfunktion sind:\nx=%d und y=%d\n”,*a,*b); } int main() { int x,y; printf("Geben Sie die Werte von x und y ein:\n"); scanf("%d %d",&x,&y); printf("bevor Werte ausgetauscht werden:\nx=%d und y=%d\n",x,y); tauschen(&x,&y); printf("Ausgetauschte Werte in Hauptfunktion sind:\nx=%d und y=%d\n",x,y); 0 zurückgeben; }

Ausgang:

Aufruf per Referenz in C

Einige zusätzliche Anweisungen werden hinzugefügt, um den Code klarer zu machen. Wir erhalten vertauschte Werte in der 'Swap'-Funktion. Aber auch in der Funktion 'main' werden die Werte durch die Verwendung von Zeigern vertauscht.

Dieser Prozess ist Anruf durch Referenz und wird im Folgenden erklärt:

Im obigen Beispiel haben wir die Adresse von zwei Variablen (x und y) an die Swap-Funktion übergeben, und die Übergabe der Adresse entspricht der Übergabe der ursprünglichen 'x' und 'y'. Die Adresse von 'x' wird im 'a'-Zeiger gespeichert und die von 'y' wird im 'b'-Zeiger gespeichert, oder die Funktionsparameter 'a' und 'b' zeigen auf 'x' bzw. 'y' . Daher wirken sich alle Änderungen an den Parametern 'a' und 'b' auf die ursprünglichen Werte 'x' und 'y' aus. Wenn also Werte von '*a' und '*b' in der 'Swap'-Funktion vertauscht werden, führt dies zu einer Wertänderung in der 'main'-Funktion.

Call nach Wert in C

Der zweite Fall des Funktionsaufrufs ist Aufruf nach Wert.

Anruf nach Wert wird auch als „normaler Funktionsaufruf“ bezeichnet. Dabei werden die Änderungen nur in der Funktion vorgenommen, die für die Durchführung der Auslagerungsaufgabe angegeben ist. Die Werte in der Funktion 'main' werden nicht verändert. Dies geschieht, weil die im Funktionsaufruf übergebenen Argumente die Kopien der in der Funktionsdefinition übergebenen Argumente sind, und es ist, als würden wir die xerox-Kopien übergeben.

Gehen Sie den Code für "Aufruf nach Wert" durch.

#enthalten int tauschen (int a, int b) { int c; c=a; a=b; b=c; printf("nachdem die Werte %d und %d ausgetauscht wurden\n",a,b); } int main() { int x,y; printf("Geben Sie die Werte von x und y ein:\n"); scanf("%d %d",&x,&y); printf("bevor Werte ausgetauscht werden: %d und %d\n",x,y); tausche(x,y); printf("nach dem Wechseln in Hauptfunktion\n"); printf("x=%d\n",x); printf("y=%d\n",y); 0 zurückgeben; }

 

Ausgang:

Call nach Wert in C

Das Ziel dieses Programms ist das gleiche wie zuvor, dh zwei Werte auszutauschen, aber der Unterschied liegt in der Herangehensweise. Hier verwenden wir den „Call by Value“-Ansatz. Wir haben 'x' und 'y' als Argumente für den Funktionsaufruf der Funktion 'Swap' übergeben.

int-Swap (int a, int b) 'a' und 'b' sind die Kopien von 'x' und 'y'. Die Swap-Funktion führt ihre Operation aus und vertauscht die Werte 'a' und 'b', aber die Werte von 'x' und 'y' bleiben gleich.

Durch Umgehen der tatsächlichen Werte an die Funktion werden Kopien der Werte übergeben, nicht die realen Werte. Aus diesem Grund wurden die Zahlen innerhalb der Funktion vertauscht, aber außerhalb davon gab es keine Änderung.

Hinterlassen Sie eine Nachricht

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.