int printHello () {
printf ( "Hello \\ n" ),
}
int printHi () {
printf ( "Hej \\ n ");
}
int main ( int argc , char * argv []) {
//Erklær en funktion pointer
int ( * p) (void) ;
//Punkt funktionen pointer til adressen på en funktion
p = printHello ,
p ();
//Punkt funktionen pointer til adressen på en anden funktion
p = printHi ,
p ();
}
2
Beslut hvad callback funktion er passende for programmet. For eksempel sammenligner den følgende kode segmentet enten to heltal eller to tegnstrenge afhængigt af værdien af den tredje argument kaldet "valgmulighed . " Hvis to heltal som sammenlignes , returnerer funktionen en værdi på 1, hvis det første tal er større end den anden. Hvis to tekststrenge sammenlignes , returnerer funktionen en værdi på 1, hvis den første tegnstreng har flere tegn end det andet .
Int tilbagekald (void * a, void * b , int option ) {
if ( option == 0 ) {
int * c = ( int * ) a;
int * d = ( int * ) b ;
afkast ( * c> * d)
} else if ( option == 1 ) {
char * c = ( char * ) a;
char * d = ( char * ) b ;
afkast ( strlen ( c ) > strlen ( d))
}
}
3
Kald funktionen tilbagekald fra kildekoden . Antag, at en boble - sortering algoritme bliver skrevet af en programmør. Denne algoritme sorterer værdierne på en liste i faldende rækkefølge. Følgende kode segment kalder callback funktion kaldet " funk ", som vil gøre sammenligningen .
Int bubbleSort ( int * værdier, int len , int ( * funk ) (void * a, void * b , int c )) {
int ( * p) (void * m , void * n , int p)
int i, j ;
p = funk ; < br >
for (i = 0; i < len , i + +) {
for ( j = 0 j < i; j + +) {
hvis (p (& værdier [ ,"I] , og værdier [j ] , 0) ) {
int t = værdier [ i] ;
værdier [i ] = værdier [j ]
værdier [ ,"j] = t;
}
}
}
}
4
Kald funktion, der påberåber sig tilbagekald funktion fra hovedprogrammet , der kræver resultatet af den slags . For boble- sortering eksempel kalder den "vigtigste " funktion boble- sortering funktion med callback funktion er angivet i trin 2. .
Int main ( int argc , char * argv []) {
< p> int i;
int a [5 ] = { 4, 2, 5, 9, 1 };
bubbleSort (a, 5, tilbagekald ),
for (i = 0; i < 5; i + +) {
printf (" % d \\ n" , a [i ])
}
} < br >