Last updated on July 27, 2020

Aktuelle Argumente #

Die Argumente, die im Funktionsaufruf genannt werden, sind als tatsächliche Argumente bekannt. Zum Beispiel:

func1(12, 23);

hier 12 und 23 sind tatsächliche Argumente.

Aktuelle Argumente können Konstanten, Variablen, Ausdrücke usw. sein.

12
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression

Formale Argumente #

Argumente, die in der Definition der Funktion erwähnt werden, nennt man formale Argumente. Formale Argumente sind den lokalen Variablen innerhalb der Funktion sehr ähnlich. Genau wie lokale Variablen werden formale Argumente zerstört, wenn die Funktion endet.

1234
int factorial(int n){ // write logic here}

Hier ist n das formale Argument. Dinge, die man sich über tatsächliche und formale Argumente merken sollte.

  1. Reihenfolge, Anzahl und Typ der tatsächlichen Argumente im Funktionsaufruf müssen mit den formalen Argumenten der Funktion übereinstimmen.
  2. Wenn es eine Typinkongruenz zwischen tatsächlichen und formalen Argumenten gibt, dann wird der Compiler versuchen, den Typ der tatsächlichen Argumente in formale Argumente zu konvertieren, wenn es legal ist, andernfalls wird ein Müllwert an das formale Argument übergeben.
  3. Änderungen im formalen Argument haben keine Auswirkungen auf die tatsächlichen Argumente.

Das folgende Programm demonstriert dieses Verhalten.

 1 2 3 4 5 6 7 8 910111213141516171819202122232425
#include<stdio.h>void func_1(int);int main(){ int x = 10; printf("Before function call\n"); printf("x = %d\n", x); func_1(x); printf("After function call\n"); printf("x = %d\n", x); // signal to operating system program ran fine return 0;}void func_1(int a){ a += 1; a++; printf("\na = %d\n\n", a);}

Hier ist der Wert der Variablen x vor dem Aufruf der Funktion func_1() 10, nach dem Aufruf von func_1() ist der Wert von x innerhalb von main() noch 10. Die Änderungen, die innerhalb der Funktion func_1() vorgenommen werden, haben keine Auswirkungen auf den Wert von x. Dies geschieht, weil bei der Übergabe von Werten an die Funktionen eine Kopie des Wertes erstellt und diese Kopie an die formalen Argumente weitergegeben wird. Daher arbeiten die formalen Argumente mit einer Kopie des Originalwerts, nicht mit dem Originalwert selbst. Deshalb werden Änderungen, die in func_1() vorgenommen werden, nicht in main() reflektiert. Dieser Prozess ist als Übergabe von Argumenten mit Call by Value bekannt, wir werden dieses Konzept in den nächsten Kapiteln ausführlicher besprechen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.