Pointeur de fonction
Le langage C fournit la possibilité de manipuler des fonctions par l'intermédiaire de pointeurs de fonction.
On pourra utiliser les pointeurs pour écrire un algorithme qui peut réaliser des calculs différents basés sur le même principe, en utilisant des fonctions différentes.
Un pointeur sur la fonction fo ayant pour prototype : type fo(type_1,...,type_n);
est de type : type (*)(type_1,...,type_n);
.
Exemple :
Soit une fonction suite
prenant comme paramètre 2 réels et une fonction de type réel qui prend elle-même 2 réels en paramètre. En choisissant double comme type réel, l'entête de sa définition sera :
double suite(double a, double b, double (*f)(double, double))
.
Sa déclaration est donnée par :
double suite(double, double, double(*)(double, double));
.
Pour appeler la fonction suite
, on utilisera comme troisième paramètre effectif l'identificateur de la fonction utilisée, par exemple, si arithmétique est une fonction de prototype :
int arithmetique(double, double);
.
On appelle la fonction suite
pour la fonction arithmétique par l'expression suite(a, b, arithmetique)
.
Notons qu'on n'utilise pas la notation &arithmétique comme paramètre effectif de suite
.
Pour appeler la fonction passée en paramètre dans le corps de la fonction suite
, on écrit (*f)(a, b)
.
Par exemple :
double suite(double a, double b, double (*f)(double, double)) {
return((*f)(a,b));
}
Ainsi, le programme suivant prend comme argument 2 réels suivis de la chaîne de caractères arith ou geome et affiche les 15 premiers termes de la suite arithmétique ou géométrique définie.