Parameterübergabe


Übergabe von Parametern

In der Programmiersprache C gibt es zwei Möglichkeiten, um Parameter an eine Funktion zu übergeben: Call by Value und Call by Reference.

Call by Value (Wertübergabe)
Call by Value wird auch als Call by Copy oder Call by restore bezeichnet. Value bedeutet Wert, also bezieht man sich hier nicht auf die Variable selbst, sondern nur auf den Wert einer Variable. Bei der Parameterübergabe nach dem Call by Value Prinzip, wird nur eine Kopie der originalen Variable angelegt. Diese Kopie belegt einen eigenen Bereich im Speicher. Wird in einer Funktion der Wert geändert, also der übergebene Parameter geändert, so hat dies keine Auswirkung auf die originale Variable. Es wird hier einfach der Wert im Speicherbereich der Kopie geändert.


 main
Namei_varibale1
Wert100
AdresseFF0012A

Eine Variable i_varibale1 vom Typ Integer wird angelegt und erhält den Wert 100.
Die Speicheradresse ist FF0012A.


 mainfunktion1
Namei_varibale1i_varibale1
Wert100100
AdresseFF0012AFF0016C

In funktion1 gibt es auch eine Variable i_varibale1 mit dem Wert 100, jedoch an einer anderen Speicheradresse.


 mainfunktion1
Namei_varibale1i_varibale1
Wert100200
AdresseFF0012AFF0016C

Wird der Wert der Variable i_varibale1 in funktion1 geändert, ändert sich an i_varibale1 in main nichts.



Call by Reference (Adressübergabe)
Bei der Parameterübergabe nach dem Call by Reference Prinzip, wird nicht wie beim Call by Value der Wert übergeben, sondern die Speicheradresse einer Variable. Ein Adressoperator " &[Variablenname] " gibt die Speicheradresse an eine Funktion. In der Funktion wird dann ein Pointer " *[Variablenname] " verwendet, um auf diese Speicheradresse zu verweisen. Der Pointer selbst ist auch eine Variable, mit eigener Speicheradresse, sie hat jedoch als Wert die Speicheradresse der Variable mit Adressoperator. Wird der Pointer Variable jetzt ein anderer Wert zugewiesen, so wird dieser in die eigentliche Variable geschrieben, also in die Variable, auf deren Adresse der Pointer verweist.


 main
Namei_varibale1
Wert100
AdresseFF0012A

Auch hier wird eine Variable i_varibale1 an Adresse FF0012A angelegt.
Wird nun der Adressoperator verwendet ( &i_varibale1 ), wird die Speicheradresse FF0012A an funktion1 übergeben.


 mainfunktion1
Namei_varibale1*pa
Wert100FF0012A
AdresseFF0012AFF0016C

Eine Variable *pa wird angelegt, wobei das * die Variable pa zum Pointer macht. Der Compiler weiss jetzt, dass *pa ein Verweis auf eine Speicheradresse ist. *pa hat also als Wert die Speicheradresse der Varialbe i_varibale1.


 mainfunktion1
Namei_varibale1*pa
Wert200FF0012A
AdresseFF0012AFF0016C

Wird nun *pa innerhalb der Funktion ein anderer Wert zugewiesen, so wird dieser Wert an der Speicheradresse geschrieben, auf die der Pointer *pa verweist. Wenn *pa = 200 gesetzt wird, so wird i_varibale1 den Wert 200 erhalten.