Декларація
Прототип функції, яка приймає параметр функції, виглядає наступним чином:
void func ( void (*f)(int) );
Це говорить про те, що параметр fбуде вказівником на функцію, яка має voidтип повернення і яка приймає один intпараметр. Наступна функція ( print) - приклад функції, яку можна передати funcяк параметр, оскільки це правильний тип:
void print ( int x ) {
printf("%d\n", x);
}
Функція виклику
Під час виклику функції з параметром функції передане значення повинно бути вказівником на функцію. Використовуйте для цього ім'я функції (без дужок):
func(print);
зателефонував func, передавши функцію друку на нього.
Функція Тіло
Як і будь-який параметр, funcтепер можна використовувати ім'я параметра в тілі функції, щоб отримати доступ до значення параметра. Скажімо, що funcзастосуємо функцію, яку вона передає числам 0-4. Розглянемо спочатку, як виглядатиме цикл для виклику друку безпосередньо:
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
print(ctr);
}
Оскільки funcв оголошенні параметра ' p ' сказано, що fце ім'я для вказівника на потрібну функцію, ми спочатку нагадаємо, що, якщо fвказівник, то *fце те, на що fвказує (тобто функція printв даному випадку). Як результат, просто замініть кожну появу друку в циклі вище на *f:
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}
Джерело
typedef.