int PrintHello () {
printf (" Bonjour \\ n" ) ; }
int printHi () {
printf (" Salut \\ n") ; }
int main (int argc, char * argv [ ] ) {
//déclarer un pointeur de fonction
int ( * p ) (void);
//point le pointeur de fonction à l'adresse d'une fonction
p = PrintHello ;
p ();
//point le pointeur de fonction à l'adresse d'une autre fonction
p = printHi ;
p (); }
2
Décidez de ce que la fonction de rappel est approprié pour le programme . Par exemple, le segment de code suivant compare soit deux nombres entiers ou deux chaînes de caractères en fonction de la valeur du troisième argument appelé " option. " Si deux entiers sont comparés , la fonction retourne une valeur de 1 si le premier nombre est plus grand que l'autre. Si deux chaînes de caractères sont comparées , la fonction retourne une valeur de 1 si la première chaîne de caractères a plus de caractères que le second .
Int callback (void * a, void * b , int options ) {
si (option == 0) {
int * c = ( int * ) a;
int * d = ( int * ) b;
retour (* c> * d);
} else if (option == 1) {
char * c = (char *) a;
char * d = (char *) b;
retour
( strlen ( c) > strlen ( d)); }
}
3
appeler la fonction de rappel à partir du code source. Supposons qu'un algorithme bulles tri est en cours d'écriture par un programmeur . Cet algorithme trie les valeurs d'une liste dans l'ordre décroissant . Le segment de code suivant appelle la fonction de rappel appelée "FUNC" qui va faire la comparaison.
Int BubbleSort ( int * valeurs, int len , int ( * func) (void * a, void * b , int c )) {
int ( * p ) ( void * m, void * n , int p);
int i , j;
p = fonction ; < br >
for (i = 0; i < len ; i + +) {
for (j = 0; j < i , j + +) {
si (p ( et valeurs [ ,"i ], et les valeurs [J] , 0)) {
int t = valeurs [ i] , les valeurs de
[i] = valeurs [j] ;
valeurs
[ ,"j] = t ;
} }
} }
4
appeler la fonction qui appelle le rappel la fonction à partir du programme principal qui requiert le résultat du tri . Pour l'exemple bulles sorte , la fonction "main" appelle la fonction bulle sorte avec la fonction de rappel spécifié à l'étape 2.
Int main (int argc, char * argv [ ] ) {
< p> int i;
int a [5] = { 4, 2, 5, 9, 1} ;
BubbleSort (a, 5, callback ) ;
for (i = 0; i < 5; i + +) {
printf ( "% d \\ n", un [i]) ; }
}