Я также новичок в C, поэтому, если есть какие-либо ошибки, пожалуйста, исправьте меня.
Указатель, указывающий на функцию, отформатирован так:
datatype (*POINTER_NAME)(PARAMETERS);
Так что это тип данных , который возвращает указанная функция, имя указателя и параметры , которые указанная функция принимает.
Вот как выглядит указатель на функцию по сравнению с обычным объявлением функции:
// normal function declaration
void getnxtbyte_t(void *stream);
// function pointer
void (*getnxtbyte_t)(void *stream);
typedef
позволяет нам создавать наш собственный тип.
// will create a type called getnxtbyte_t
typedef void (*getnxtbyte_t)(void *stream);
На данный момент мы только объявили тип; мы ни на что не указываем. Итак, давайте создадим указатель с именем func_ptr
и наведем его на функцию.
// func_ptr is a pointer of type getnxtbyte_t
getnxtbyte_t func_ptr = another_function;
// calling func_ptr is now the same as calling another_function
func_ptr(an_argument);
// had we not used typedef, we would type:
void (*getnxtbyte_t)(void *stream) = another_func;
getnxtbyte_t(an_argument);