Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Naučte sa písať kód v C s funkčnými ukazovateľmi . Ukazovatele funkcií sú ako všetky ostatné ukazovatele v C , okrem toho , že sú držiteľmi adresu funkcie . Kód segmentu nižšie je jednoduchý príklad s funkčnými ukazovateľmi .
# Include int printHello ( ) { printf ( " Hello \\ n" ) ; } int printHi ( ) { printf ( " Ahoj \\ n" ) ; } int main ( int argc , char * argv [ ] ) { //deklarovať ukazovateľ funkcie int ( * p ) ( void ) ; //bod funkcie ukazovateľ na adresu funkcie p = printHello ; p ( ) ; //bod funkcie ukazovateľ na adresu inú funkciu p = printHi ; p ( ) ; } Rozhodnite o tom , čo callback funkcia je vhodné pre tento program . Napríklad nasledujúci kód segmentu porovnáva buď dve celé čísla alebo dva reťazce znakov v závislosti na hodnote tretí argument s názvom " možnosť . " Ak sú dve celé čísla sú porovnávané , funkcia vracia hodnotu 1 v prípade , že prvé číslo je väčšie ako druhý . Ak sú porovnávané dva znakové reťazce , funkcia vráti hodnotu 1 , ak je prvý znak reťazca má viac znakov ako sekundu . Int callback ( void * , void * b , int voľba ) { if ( voľba == 0 ) { int * c = ( int * ) ; int * d = ( int * ) b ; návrat ( * c > * d ) ; } else if ( voľba == 1 ) { char * c = ( char * ) ; char * d = ( char * ) b ; vrátiť ( strlen ( c ) > strlen ( d ) ) ; } } volanie funkcie spätného volania zo zdrojového kódu . Predpokladajme , že bubble - sort algoritmus je napísaný programátorom . Tento algoritmus zoradia hodnoty v zozname v zostupnom poradí . Nasledujúci úsek kódu volá funkciu spätného volania s názvom " funkcie " , ktorý bude robiť porovnanie . Int bubblesort ( int * hodnoty , int ľan , int ( * func ) ( void * , void * b , int c ) ) { int ( * p ) ( void * m , void * n , int p ) ; int i , j ; p = funkcie ; for ( i = 0 ; i < ľan ; i + + ) { for ( j = 0 ; j < i , j + + ) { if ( p ( a hodnoty [ ,"i ] , a hodnoty [ j ] , 0 ) ) { int t = hodnota [ i ] ; hodnoty [ i ] = hodnota [ j ] ; hodnoty [ ,"j ] = t ; } } } } volanie funkcie , ktorá vyvolá spätné volanie funkcie z hlavného programu , ktorý vyžaduje výsledok druhu . Pre príklad bubble - sort , " hlavné " funkcia volá funkciu bubble - sort s funkciou spätného volania zadanej v kroku 2. Int main ( int argc , char * argv [ ] ) { int i ; celým int [ 5 ] = { 4 , 2 , 5 , 9 , 1 } , celým bubblesort ( a , 5 , spätné volanie ) ; celým for ( i = 0 ; i < 5 ; i + + ) { printf ( " % d \\ n" , [ i ] ) ; } }
2
3
4