Call-by-Reference
Call-by-Reference bedeutet allgemein, dass eine Funktion direkt auf die ursprüngliche Variable zugreifen kann.
In C gibt es kein echtes Call-by-Reference. Stattdessen wird referenzartiges Verhalten durch Übergabe einer Adresse simuliert.
Man übergibt einen Pointer und verändert den Speicherinhalt über Dereferenzierung.
Beispiel:
void upgrade(int *meinezahl) {
*meinezahl = 18;
}
int main() {
int x = 5;
upgrade(&x);
printf("%d\n", x);
}
Ausgabe:
18
Grund: &x übergibt die Adresse von x, und *meinezahl = 18 verändert den Inhalt an dieser Adresse.
Wichtiger Unterschied
void falsch(int *p) {
p = 18;
}
ändert nicht den ursprünglichen Wert, sondern nur den lokalen Pointerwert. Korrekt ist:
void richtig(int *p) {
*p = 18;
}
Merksatz
In C werden auch Pointer per Call-by-Value übergeben. Man kann aber über den kopierten Pointer denselben Speicherinhalt verändern.