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