Grundlagen der Programmiersprache C

int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
int main(void) {
    int (*op[2])(int, int) = {add, mul};
    int r = 1;
    for (int i = 0; i < 2; i++)
        r = op[i](r, 3);
    printf("%d\n", r);
    return 0;
}

Welche Ausgabe erzeugt das obige Programm mit einem Array von Funktionszeigern bei der Ausführung?

  1. A3
  2. B6
  3. C12
Antwort und Erläuterung anzeigen

Antwort: C. 12

op ist ein Array aus zwei Zeigern auf Funktionen, die zwei int-Werte erhalten und einen int-Wert zurückgeben; op[0] enthält die Adresse von add, op[1] die von mul. op[i](r, 3) ruft die Funktion auf, auf die der jeweilige Zeiger zeigt. Bei i = 0 ergibt sich r = add(1, 3) = 4, bei i = 1 r = mul(4, 3) = 12. Ein Funktionszeiger wird etwa für Tabellen zum Umschalten zwischen Verarbeitungen, für Interrupt-Vektoren oder für Callbacks verwendet.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. fill und use seien separat definierte Funktionen. Welches Problem hat die obige Funktion?
  2. Was trifft auf den Zeiger zu, den die obige Funktion make zurückgibt?
  3. Warum wird in C empfohlen, unmittelbar nach free(p); die Anweisung p = NULL; zu schreiben?
  4. Der obigen Funktion save wird die Zeichenkette "ABCDEFGH" mit 8 Zeichen übergeben. Was passiert?
  5. Was trifft in C auf die Dereferenzierung eines NULL-Zeigers zu (wenn *p gelesen wird, während p NULL ist)?