13.5.3 Passage en paramètre de l'adresse d'une fonction

Icône de l'outil pédagogique Passage en paramètre de l'adresse d'une fonction

L'utilisation de pointeur de fonction permet de passer une fonction en paramètre d'une autre fonction. Par exemple, créons un type « fonction qui reçoit un double et renvoie un double » appelé T_FONC :

typedef double T_FONC( double x ) ;

et supposons définies deux fonctions fct1 et fct2 dont les prototypes sont :

T_FONC fct1, fct2 ;

On peut transmettre en paramètre l'adresse de fct1 ou fct2, par exemple à une fonction de calcul de dérivée. Cette fonction de calcul de dérivée, qu'on appelle calculer_deriv, peut avoir un prototype du genre :

double calculer_deriv ( T_FONC* ptr_fct, ... ) ;

calculer_deriv reçoit l'adresse de la fonction à dériver ainsi que d'autres paramètres, et renvoie le résultat double de son calcul.
La fonction calculer_deriv sera simplement appelée de la façon suivante :

res1 = calculer_deriv( fct1, ... ) ;
res2 = calculer_deriv( fct2, ... ) ;

La fonction dont on transmet l'adresse à calculer_deriv sera appelée à l'intérieur de calculer_deriv par :

(*ptr_fct)(x)
ou
res = (*ptr_fct)(x) ;

En résumé (voir l’exemple qui suit) :

typedef double T_FONC(double x) ; /* création du type T_FONCTION */
double calculer_deriv ( T_FONC* f, ... ) ; /* prototype de calculer_deriv */
T_FONC fct1, fct2 ; /* prototypes de fct1, fct2 */

res = calculer_deriv( fct1, ... ) ; /* appel de calculer_deriv */
res = (*f)(x) ; /*appel dans calculer_deriv de la fonction passée en paramètre*/

Exemple 85 : Passage en paramètre d'une fonction