Указатель на функцию
Указатель на функцию — это переменная-указатель, которая указывает на функцию.
Обычно переменная-указатель, о которой мы говорим, указывает на переменную, такую как целое число, символ или массив, тогда как указатель на функцию указывает на функцию.
Указатель на функцию можно использовать как обычную функцию для вызова функций и передачи параметров.
Объявление типа указателя на функцию:
typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型
Пример
В следующем примере объявляется переменная-указатель на функцию p, указывающая на функцию max:
Пример
Скомпилируйте и выполните, результат вывода будет следующим:
请输入三个数字:1 2 3 最大的数字是: 3
функция обратного вызова
Указатель на функцию в качестве параметра функции
Переменная-указатель на функцию может использоваться в качестве параметра некоторой функции; функция обратного вызова — это функция, вызываемая через указатель на функцию.
Проще говоря: функция обратного вызова — это функция, которую вы реализуете и которая вызывается во время выполнения чужой функции.
Ниже приведено объяснение автора Zhihu Чан Силина:
Вы идёте в магазин за покупкой, но нужного товара как раз нет в наличии, поэтому вы оставляете продавцу свой номер телефона. Через несколько дней товар появляется в наличии, и продавец звонит вам; получив звонок, вы идёте в магазин забирать товар. В этом примере ваш номер телефона называется функцией обратного вызова, оставление номера продавцу называется регистрацией функции обратного вызова, последующее появление товара в наличии называется запуском события, связанного с обратным вызовом, звонок продавца вам называется вызовом функции обратного вызова, а ваш поход в магазин за товаром называется реакцией на событие обратного вызова.
Пример
в примереpopulate_array()Функция определяет три параметра, третий из которых — указатель на функцию; значения массива задаются через эту функцию.
В примере мы определили функцию обратного вызоваgetNextRandomValue()Она возвращает случайное значение, и она передаётся как указатель на функцию вpopulate_array()функцию.
populate_array()вызовет10функцию обратного вызова и присвоит возвращаемое значение функции обратного вызова массиву.
Пример
Скомпилируйте и выполните, результат вывода будет следующим:
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709Другие расширения