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.