Grundlagen der Programmiersprache C

void f(int x) { x = 10; }
void g(int *p) { *p = 20; }
int main(void) {
    int a = 1, b = 1;
    f(a);
    g(&b);
    printf("%d %d\n", a, b);
    return 0;
}

Welche Ausgabe erzeugt das obige Programm bei der Ausführung?

  1. A1 20
  2. B10 1
  3. C10 20
Antwort und Erläuterung anzeigen

Antwort: A. 1 20

In C wird jedes Argument einer Funktion als Wert übergeben (Call by Value): Beim Aufruf f(a) wird der Wert 1 von a nach x kopiert. Setzt f die Variable x auf 10, ändert sich nur die Kopie; das a des Aufrufers bleibt 1. Bei g(&b) wird die Adresse von b übergeben, daher schreibt *p = 20 in g direkt in b, und b wird 20. Soll eine Funktion eine Variable des Aufrufers ändern, übergibt man wie hier einen Zeiger.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Die obige Funktion f wird dreimal hintereinander aufgerufen. Welcher Rückgabewert ergibt sich beim dritten Aufruf?
  2. Welche Kombination gibt in C die Zeitspanne (Lebensdauer) richtig an, in der (1) eine in einer Funktion ohne static deklarierte lokale Variable, (2) ein mit malloc reservierter Bereich und (3) eine außerhalb von Funktionen deklarierte Variable existieren?
  3. int habe 32 Bit (Maximalwert 2147483647). Was ist das größte n, für das die obige Funktion fact(n) die Fakultät von n ohne Überlauf korrekt zurückgibt?
  4. int habe 4 Byte und ein Zeiger 8 Byte. Ein Zeiger p auf int hat den Wert (die Adresse) 0x1000. Welchen Wert hat p + 3?
  5. int habe 4 Byte und ein Zeiger 8 Byte. Welche Ausgabe erzeugt das obige Programm bei der Ausführung?