Μάθετε να γράψουν κώδικα C με δείκτες συναρτήσεων . Δείκτες συναρτήσεων είναι σαν οποιοδήποτε άλλο δείκτες σε C , εκτός από το ότι κατέχουν τη διεύθυνση μιας συνάρτησης . Το τμήμα κώδικα παρακάτω είναι ένα απλό παράδειγμα με τους δείκτες συναρτήσεων .
# Include int printHello ( ) { printf ( "Hello \\ n " ) ? } int printHi ( ) { printf ( "Γεια \\ n" ) ? } int main ( int argc , char * argv [ ] ) { //Να αναγνωρίσει ένα δείκτη λειτουργία int ( * p ) ( void) ? //Στρέψτε το δείκτη συνάρτησης στη διεύθυνση μιας συνάρτησης p = printHello ? p ( ) ? //Στρέψτε το δείκτη συνάρτησης στη διεύθυνση μιας άλλης λειτουργίας p = printHi ? p ( ) ? } 2 Αποφασίστε τι λειτουργία επανάκλησης είναι κατάλληλη για το πρόγραμμα . Για παράδειγμα , ο παρακάτω κώδικας τμήμα συγκρίνει είτε δύο ακέραιους αριθμούς ή δύο ακολουθίες χαρακτήρων ανάλογα με την αξία του το τρίτο επιχείρημα που ονομάζεται "επιλογή ". Αν δύο ακέραιοι συγκρίνονται , η συνάρτηση επιστρέφει μια τιμή από 1 , εάν ο πρώτος αριθμός είναι μεγαλύτερος από ό, τι το άλλο. Εάν σε σύγκριση με δύο σειρές χαρακτήρα , η συνάρτηση επιστρέφει την τιμή 1 αν η πρώτη ακολουθία χαρακτήρων έχει περισσότερους χαρακτήρες από το δεύτερο . Int επανάκλησης (void * a, b * κενό , η επιλογή int) { αν ( επιλογή == 0 ) { int * c = ( int *) α ? int * d = ( int * ) β ? επιστροφή ( γ * > * δ) ? } else if ( επιλογή == 1 ) { char * c = ( char *) α ? char * d = ( char * ) β ? επιστρέψει ( strlen ( γ ) > strlen ( δ) ) ? } } Καλέστε τη λειτουργία επανάκλησης από τον πηγαίο κώδικα . Ας υποθέσουμε ότι ένας αλγόριθμος bubble -sort γράφεται από έναν προγραμματιστή . Αυτός ο αλγόριθμος ταξινομεί τις τιμές σε μια λίστα κατά φθίνουσα σειρά . Το ακόλουθο τμήμα κώδικα καλεί τη συνάρτηση επανάκλησης που ονομάζεται " λειτουργία " που θα κάνει τη σύγκριση . Int bubbleSort ( int * τιμές , int len , int ( * func ) (void * a, void * b, int c ) ) { int ( * p ) (void * m , void * n , int p) ? int i , j ? p = λειτουργία ? για ( i = 0 ? i για ( j = 0 ? j αν ( p ( & τιμές [ ,"> gia ( i = 0 ?̱ i gia ( j = 0 ?̱ j an ( p ( & timés [ i ] , και οι τιμές [ ι ] , 0 ) ) { int t = τιμές [ i ] ? τιμές [ i ] = τιμές [ ι ] ? τιμές [ ,"i ] , kai oi timés [ i ] , 0 ) ) { int t = timés [ i ] ?̱ timés [ i ] = timés [ i ] ?̱ timés [ j] = t ? } } } } Καλέστε τη λειτουργία που επικαλείται το επανάκλησης λειτουργεί από το κύριο πρόγραμμα που απαιτεί το αποτέλεσμα του είδους . Για παράδειγμα bubble -sort , ο «κύριος » λειτουργία καλεί τη συνάρτηση bubble -sort με τη λειτουργία επανάκλησης καθορίσατε στο Βήμα 2 . Int main ( int argc , char * argv [ ] ) { int i ? int a [ 5 ] = { 4 , 2 , 5 , 9 , 1 } ? bubbleSort ( α , 5 , επανάκλησης ) ? για ( i = 0 ? i <5 ? i + + ) { printf ( "% d \\ n" , a [i ] ) ? } }
εικόνων 3
Η 4
Η
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα