Bases de la programmation en 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;
}

Quelle est la sortie obtenue en exécutant le programme ci-dessus, qui utilise un tableau de pointeurs de fonction ?

  1. A3
  2. B6
  3. C12
Afficher la réponse et l'explication

Réponse : C. 12

op est un tableau de deux pointeurs sur des fonctions qui prennent deux int et renvoient un int ; op[0] contient l'adresse de add et op[1] celle de mul. op[i](r, 3) appelle la fonction pointée. Pour i = 0, r = add(1, 3) = 4, puis pour i = 1, r = mul(4, 3) = 12. Les pointeurs de fonction servent aux tables d'aiguillage des traitements, aux vecteurs d'interruption, aux fonctions de rappel (callbacks), etc.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. fill et use sont des fonctions définies ailleurs. Quel est le problème de la fonction ci-dessus ?
  2. Quelle affirmation sur le pointeur renvoyé par la fonction make ci-dessus est correcte ?
  3. En C, quelle est la raison la plus appropriée pour laquelle il est recommandé d'écrire p = NULL; juste après free(p); ?
  4. La chaîne de 8 caractères "ABCDEFGH" est passée à la fonction save ci-dessus. Que se passe-t-il ?
  5. En C, quelle description de ce qui se passe lorsqu'un pointeur NULL est déréférencé (lecture de *p alors que p vaut NULL) est correcte ?