Deklaracja
Prototyp funkcji, która przyjmuje parametr funkcji, wygląda następująco:
void func ( void (*f)(int) );
Oznacza to, że parametr f
będzie wskaźnikiem do funkcji, która ma void
typ zwracany i która przyjmuje pojedynczy int
parametr. Następująca funkcja ( print
) jest przykładem funkcji, do której można przekazać func
jako 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, func
można teraz używać nazwy parametru w treści funkcji, aby uzyskać dostęp do wartości parametru. Powiedzmy, że func
zastosuje 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ż func
deklaracja parametru mówi, że f
jest to nazwa wskaźnika do żądanej funkcji, najpierw przypominamy sobie, że jeśli f
jest wskaźnikiem, *f
to rzecz, która f
wskazuje (tj. Funkcja print
w 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
.