int printHello ( ) {
printf ( "Hello \\ n" ) ;
}
int printHi ( ) {
printf ( "Hei \\ n ");
}
int main ( int argc , char * argv [ ] ) {
//Erklærer en funksjon peker
int ( * p ) (void ) ;
//Point funksjonen pekeren til adressen til en funksjon
p = printHello ;
p ();
//Rett funksjon peker til adressen til en annen funksjon
p = printHi ;
p ();
}
2
Bestem deg for hva tilbakeringing funksjonen er egnet for programmet. For eksempel sammenligner den følgende kode segment enten to heltall eller to tegnstrenger avhengig av verdien av den tredje argumentet kalt "alternativet. " Hvis to hele tall som skal sammenlignes , returnerer funksjonen en verdi på 1 hvis det første tallet er større enn den andre. Hvis to tegn strengene sammenliknes , returnerer funksjonen verdien 1 hvis det første tegnet strengen har flere tegn enn den andre .
Int tilbakeringing (void * en , ugyldige * b , int valg) {
if (valg == 0 ) {
int * c = ( int * ) a;
int * d = ( int * ) b;
retur ( * c > * d ) ;
} else if (valg == 1 ) {
røye * c = ( char * ) a;
char * d = ( char * ) b;
avkastning ( strlen ( c ) > strlen ( d ));
}
}
3
Ring tilbakekallsfunksjon fra kildekoden . Anta at en boble -sort algoritmen blir skrevet av en programmerer . Denne algoritmen sorterer verdiene i en liste i synkende rekkefølge. Følgende kode segmentet kaller tilbakeringing funksjon som kalles " funk " som vil gjøre sammenligningen .
Int bubbleSort ( int * verdier , int len , int ( * funk ) (void * en , ugyldige * b , int c ) ) {
int ( * p ) (void * m , ugyldige * n, int p) ;
int i, j ;
p = funk ;
for (i = 0 ; i < len , i + + ) {
for ( j = 0 ; j < i; j + + ) {
if ( p ( og verdier [ ,"i] , og verdier [ j ] , 0 ) ) {
int t = Verdier [ i] ;
verdier [ i] = verdier [ j ];
verdier [ ,"j ] = t ;
}
}
}
}
4
Ring funksjonen som påkaller tilbakeringing funksjon fra hovedprogrammet som krever et resultat av den slags . For boblen -sort eksempel kaller "main "-funksjonen boble- sorteringsfunksjonen med tilbakekallsfunksjon spesifisert i trinn to .
Int main ( int argc , char * argv [ ] ) {
< p> int i;
int a [ 5 ] = { 4, 2, 5, 9 , 1 };
bubbleSort ( a, 5 , tilbakeringing ) ;
for (i = 0 ; i < 5; i + + ) {
printf ( "% d \\ n" , en [ i] ) ;
}
}