Menu
Coddy logo textTech

Appel de pointeurs sur fonctions

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 34 sur 61.

Maintenant que vous savez comment déclarer un pointeur de fonction et lui affecter une fonction, l’étape suivante consiste à appeler réellement la fonction via ce pointeur.

La syntaxe est simple. Vous utilisez le pointeur de fonction comme vous appelleriez une fonction ordinaire :

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*operation)(int, int) = add;
    
    int result = operation(5, 3);  // Appelle add(5, 3)
    printf("%d\n", result);        // Sortie : 8
    return 0;
}

Écrivez simplement le nom du pointeur suivi de parenthèses contenant les arguments. C déréférence automatiquement le pointeur et exécute la fonction vers laquelle il pointe.

Vous pouvez également utiliser la syntaxe de déréférencement explicite avec (*operation)(5, 3), mais c’est facultatif et moins courant. Les deux formes produisent des résultats identiques.

La véritable puissance apparaît lorsque vous réaffectez le pointeur à différentes fonctions :

int subtract(int a, int b) {
    return a - b;
}

operation = subtract;
result = operation(5, 3);  // Appelle maintenant subtract(5, 3)
printf("%d\n", result);    // Sortie : 2

La même variable operation exécute désormais une logique complètement différente. Cette capacité à remplacer le comportement à l’exécution constitue le fondement du polymorphisme en C.

challenge icon

Défi

Facile

Entraînons-nous à appeler des fonctions via des pointeurs et à changer la fonction exécutée. Tu vas créer une calculatrice simple capable de basculer entre l’addition et la soustraction lors de l’exécution.

Écris un programme qui :

  1. Définit deux fonctions :
    • add : prend deux paramètres int et renvoie leur somme
    • subtract : prend deux paramètres int et renvoie le premier moins le second
  2. Dans main, déclare un pointeur de fonction appelé calc qui peut pointer vers des fonctions prenant deux paramètres int et renvoyant un int
  3. Lit quatre entrées : deux entiers et deux codes d’opération
  4. Pour chaque code d’opération :
    • Attribue la fonction appropriée à calc (1 pour l’addition, 2 pour la soustraction)
    • Appelle la fonction via le pointeur avec les deux nombres
    • Affiche le résultat

Tu recevras quatre entrées : le premier nombre, le deuxième nombre, le premier code d’opération (1 ou 2) et le deuxième code d’opération (1 ou 2).

Ta sortie doit afficher deux résultats sur des lignes distinctes : un pour chaque opération effectuée avec les mêmes deux nombres :

15
5

Dans cet exemple, avec les entrées 10, 5, 1, 2 : la première opération (code 1) additionne 10 + 5 = 15, puis le pointeur est réaffecté, et la deuxième opération (code 2) soustrait 10 - 5 = 5.

Cela montre comment la même variable pointeur peut exécuter une logique complètement différente en lui réattribuant une fonction entre les appels.

Essayez vous-même

#include <stdio.h>

// TODO: Définir la fonction add ici


// TODO: Définir la fonction subtract ici


int main() {
    // Lire les entrées
    int num1, num2, op1, op2;
    scanf("%d", &num1);
    scanf("%d", &num2);
    scanf("%d", &op1);
    scanf("%d", &op2);
    
    // TODO: Déclarer un pointeur de fonction appelé 'calc' qui peut pointer vers
    // des fonctions prenant deux paramètres int et renvoyant un int
    
    
    // TODO: Pour le premier code d'opération (op1) :
    // - Assigner la fonction appropriée à calc (1 pour add, 2 pour subtract)
    // - Appeler la fonction via le pointeur et afficher le résultat
    
    
    // TODO: Pour le second code d'opération (op2) :
    // - Réassigner calc à la fonction appropriée
    // - Appeler la fonction via le pointeur et afficher le résultat
    
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne