Deklaracja
Prototyp funkcji, która przyjmuje parametr funkcji, wygląda następująco:
void func ( void (*f)(int) );
Oznacza to, że parametr fbędzie wskaźnikiem do funkcji, która ma voidtyp zwracany i która przyjmuje pojedynczy intparametr. Następująca funkcja ( print) jest przykładem funkcji, do której można przekazać funcjako parametr, ponieważ jest to właściwy typ:
void print ( int x ) {
printf("%d\n", x);
}
Wywołanie funkcji
Podczas wywoływania funkcji z parametrem funkcji przekazywana wartość musi być wskaźnikiem funkcji. Użyj do tego nazwy funkcji (bez nawiasów):
func(print);
zadzwoni func, przekazując mu funkcję drukowania.
Funkcja Body
Jak w przypadku każdego parametru, funcmożna teraz używać nazwy parametru w treści funkcji, aby uzyskać dostęp do wartości parametru. Powiedzmy, że funczastosuje funkcję, która zostanie przekazana do liczb 0-4. Najpierw zastanów się, jak pętla mogłaby wyglądać tak, aby wywołać print:
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
print(ctr);
}
Ponieważ funcdeklaracja parametru mówi, że fjest to nazwa wskaźnika do żądanej funkcji, najpierw przypominamy sobie, że jeśli fjest wskaźnikiem, *fto rzecz, która fwskazuje (tj. Funkcja printw tym przypadku). W rezultacie po prostu zamień każde wystąpienie wydruku w powyższej pętli na *f:
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}
Źródło
typedef.