Der Unterschied zwischen tatsächlichen Parametern und formalen Parametern

Anfänger werden verwirrt sein über den tatsächlichen Unterschied zwischen tatsächlichen und formalen Parametern und darüber, welche Auswirkungen es haben wird, wenn sie ihn nicht im Detail verstehen. Ich werde ihn hier ausführlich erklären.

Dabei handelt es sich um den Unterschied zwischen Call-by- Value und Call- by-Reference einer Funktion.

Funktionsparameter werden in Aktualparameter und Formalparameter unterteilt.

Beim Aufrufen einer Funktion muss die Hauptfunktion Parameter an die benutzerdefinierte Funktion übergeben. Es gibt tatsächliche Beteiligungsformen in der Funktion. Die Wertübergabeoperation in der Hauptfunktion ist ein tatsächlicher Parameter, und die Empfangswertoperation der benutzerdefinierten Funktion ist ein Formaler Parameter, und der formale Parameter ist ein tatsächlicher Parameter. Temporäre Kopie von Parametern, Änderung formaler Parameter hat keine tatsächliche Auswirkung auf tatsächliche Parameter.

Um es ganz klar auszudrücken: Die realen und formalen Parameter belegen alle einen unabhängigen Speicherblock. Wenn Sie den Wert des formalen Parameters ändern möchten, müssen Sie die Adresse mit einem Zeiger an die Funktion übergeben.

Als nächstes werde ich zwei einfache Beispiele zum Üben verwenden

Dies ist die korrekte Parameterübergabeoperation

void Swap(int*x,int*y)//形参
{
	int tmp = *x;
	*x = *y;
	*y = tmp;
}
int main()
{

	int a = 10;
	int b = 20;
	Swap(&a,&b);//实参
	printf("%d %d", a, b);
	return 0;
}

 Dies ist ein falscher Übergabeparameter.

void Swap(int x,int y)//形参
{
	int tmp = x;
	x = y;
	y = tmp;
}
int main()
{

	int a = 10;
	int b = 20;
	Swap(a,b);//实参
	printf("%d %d", a, b);
	return 0;
}

Wie ich oben sagte, haben tatsächliche Parameter unabhängige Speicherblöcke. In der obigen Abbildung werden nur Werte, aber keine Adressen übergeben, sodass die tatsächlichen Parameter in der Hauptfunktion in der Swap-Funktion unterschiedliche Speicherblöcke und in der Swap-Funktion sind Der Swap-Vorgang wurde bereits ausgeführt, da der Stapelspeicher unterschiedlich ist und der Funktions-Swap-Vorgang von Swap nicht von der Hauptfunktion empfangen werden kann.

So viele einfache Zusammenfassungen, das heißt, wenn es eine Operation zum Ändern des Werts der benutzerdefinierten Funktion gibt, muss die Adresse durch den Zeiger übergeben werden, damit die Adresse der benutzerdefinierten Funktion mit der Adresse der Hauptfunktion übereinstimmt. Einfach Mit anderen Worten, die benutzerdefinierte Funktion kann den Wert der Hauptfunktion ändern, wenn sie über die Adresse aufgerufen wird.

Bitte korrigieren Sie mich, wenn es Mängel gibt.

Guess you like

Origin blog.csdn.net/m0_66977204/article/details/130451293