Декларація
Прототип функції, яка приймає параметр функції, виглядає наступним чином:
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
.