int PrintHello ( ) {
printf ( " Hej \\ n " ) ;
}
int printHi ( ) {
printf ( " Hej \\ n " ) ;
}
int main ( int argc , char * argv [ ] ) {
//Deklarera en funktion
pekare
int ( * p ) ( void ) ;
//Point funktionspekaren till adressen för en funktion
p = PrintHello ;
p ();
//Point funktionspekaren till adressen för en annan funktion
p = printHi ;
p ( ) ;
}
2
Bestäm vilken callback -funktion är lämplig för programmet . Till exempel , jämför följande kodsegmentet antingen två heltal eller två teckensträngar beroende på värdet av det tredje argumentet som kallas " alternativ. " Om två heltal som jämförs , returnerar funktionen ett värde av 1 om första siffran är större än den andra . Om två teckensträngar jämförs , returnerar funktionen ett värde av 1 , om den första teckensträng har fler tecken än det andra .
Återuppringning
int ( void * a , void * b , int option ) {
om ( option == 0 ) {
int * c = ( int * ) a ;
int * d = ( int * ) b;
avkastning ( * c > * d ) ;
} else if ( option == 1 ) {
char * c = ( char * ) a ,
char * d = ( char * ) b;
retur ( strlen ( c ) > strlen ( d ) ) ;
}
}
3
Ring callback-funktionen från källkoden . Antag att en bubbla - sort algoritm skrivs av en programmerare . Denna algoritm sorterar värdena i en lista i fallande ordning . Följande kod segmentet anropar callback-funktion som kallas " funk " som kommer att göra den jämförelsen .
Int bubbleSort ( int * värden , int len , int ( * func ) ( void * a , void * b , int c )) {
int ( * p) ( void * m, void * n , int p) ;
int i, j ;
p = func ;
for (i = 0 ; i < len , i + + ) {
för ( j = 0 ; j < i; j + + ) {
om ( p ( & värden [ ,"I] och värderingar [J] , 0 ) ) {
int t = värden [ i] ,
värden [ i] = värden [ j ],
värden [ ,"j ] = t ;
}
}
}
}
4
Anropa funktionen som anropar återuppringning funktion från huvudprogrammet som kräver resultatet av sorteringen . För bubble- sort exempel , kallar den "viktigaste " funktion bubblan - sorteringsfunktion med callback-funktionen angav i steg 2 .
Int main ( int argc , char * argv [ ] ) {
< p> int i;
int a [ 5 ] = { 4 , 2 , 5 , 9 , 1 };
bubbleSort (a, 5 , återuppringning );
for (i = 0 ; i < 5 , i + + ) {
printf ( " % d \\ n " , a [ i] ) ;
}
}
Addera ditt