int printHello () {
printf ("Hola \\ n " ) ;
}
int printHi () {
printf ( "Hola \\ n"); }
int main (int argc, char * argv [ ] ) {
//Declara un puntero a función
int ( * p) ( void);
//Apunte el puntero de función a la dirección de una función
p = printHello ;
p ();
//Apunte el puntero de función a la dirección de otra función
p = printHi ;
p (); }
2
Decida cuál es la función de devolución de llamada es apropiado para el programa . Por ejemplo , el segmento de código siguiente se comparan o bien dos números enteros o dos cadenas de caracteres en función del valor del tercer argumento llamado " opción . " Si se comparan dos números enteros , la función devuelve un valor de 1 si el primer número es mayor que el otro . Si se comparan dos cadenas de caracteres , la función devuelve un valor de 1 si la primera cadena de caracteres tiene más caracteres que el segundo .
Int callback (void * a , void * b , int opcion ) {
if ( option == 0 ) {
int * c = (int *) a;
int * d = (int *) b;
regreso ( c * > * d ) ;
} else if ( option == 1 ) {
char * c = (char *) a;
char * d = (char *) b;
regreso ( strlen ( c ) > strlen ( d )); }
}
3
Llame a la función de devolución de llamada desde el código fuente . Supongamos que un algoritmo de burbuja especie está siendo escrito por un programador. Este algoritmo ordena los valores en una lista en orden decreciente . El siguiente segmento de código llama a la función callback llamada " función ", que va a hacer la comparación.
BubbleSort int ( int * Valores , int len , int ( * func) (void * a , void * b , int c )) {
int ( * p ) (void * m, void * n , int p ) ;
int i, j;
p = func ; < br >
for (i = 0 ; i < len; i + + ) {
for (j = 0 , j < i , j + + ) {
if ( p ( y valores [ ,"i ], y los valores de [j ] , 0 )) {
int t = valores [ i] , valores
[ i ] = valores [j] ;
valores
[ ,"j ] = t;
} } }
}
4
Llame a la función que invoca la devolución de llamada función del programa principal que requiere el resultado de la ordenación . Para el ejemplo de la burbuja - tipo , la función "main " llama a la función bubble -sort con la función de devolución de llamada especificado en el paso 2 .
Int main (int argc, char * argv [ ] ) {
< p > int i ;
int a [ 5 ] = { 4 , 2 , 5 , 9 , 1 } ;
bubbleSort (a, 5 , devolución de llamada ) ;
for (i = 0 ; i < 5 ; i + + ) {
printf ("% d \\ n", a [i ] ) ; }
}