Basis van programmeren in 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;
}

Wat is de uitvoer als het bovenstaande programma, dat een array van functiepointers gebruikt, wordt uitgevoerd?

  1. A3
  2. B6
  3. C12
Antwoord en toelichting tonen

Antwoord: C. 12

op is een array van twee pointers naar functies die twee ints aannemen en een int teruggeven; op[0] bevat het adres van add en op[1] dat van mul. op[i](r, 3) roept de functie aan waarnaar de pointer wijst. Met i = 0 is r = add(1, 3) = 4, en met i = 1 is r = mul(4, 3) = 12. Functiepointers worden gebruikt voor dispatchtabellen, interruptvectoren, callbacks en dergelijke.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. fill en use zijn elders gedefinieerde functies. Wat is een probleem van de bovenstaande functie?
  2. Wat is juist over de pointer die de bovenstaande functie make teruggeeft?
  3. Wat is in C de meest passende reden waarom wordt aangeraden om direct na free(p); de regel p = NULL; te schrijven?
  4. De string "ABCDEFGH" van 8 tekens werd aan de bovenstaande functie save doorgegeven. Wat gebeurt er?
  5. Welke beschrijving van wat er in C gebeurt als een NULL-pointer wordt gederefereerd (*p wordt gelezen terwijl p NULL is), is juist?