13.5.2 Définition et utilisation d'un pointeur de fonction

Icône de l'outil pédagogique Définition et utilisation d'un pointeur de fonction

On commence par créer un type T_FONCTION pour caractériser les fonctions « qui reçoivent deux paramètres short int et double et qui renvoient un résultat de type short int » :

typedef short int T_FONCTION( short int n, double x ) ;

Pour définir un pointeur sur une fonction de type T_FONCTION, il suffit d'écrire très classiquement :

T_FONCTION* ptr_fct ;

ptr_fct est alors un pointeur sur une « fonction à 2 paramètres short et double qui renvoie un entier ».

Juste pour vous montrer l'intérêt de typedef pour simplifier les écritures avec les pointeurs de fonctions, voici la définition de ptr_fct qui n'utilise pas typedef :

short int (*ptr_fct)(short int a, float b) ; /* bof ! */

On rappelle que le nom d'une fonction représente son adresse. Le pointeur de fonction ptr_fct peut donc être affecté par :

ptr_fct = f1 ;
ptr_fct = f2 ;

si f1 et f2 sont deux fonctions déclarées par :

T_FONCTION f1 ; /*notez la simplicité des prototypes avec typedef !*/
T_FONCTION f2 ;

On peut donc faire varier la fonction appelée par le programme en modifiant le contenu du pointeur.

Une fois que ptr_fct « pointe » sur une fonction donnée (par exemple f1 ou f2), on peut appeler la fonction par l'intermédiaire du pointeur.
L' appel de la fonction dont l'adresse figure dans le pointeur ptr_fct s'écrit alors :
(*ptr_fct) ( 5, 12.4f )
ou
res = (*ptr_fct)( 5, 12.4f )

Exemple 84 : Utilisation d'un pointeur de fonction