A.7 Указатели на функции

Предыдущая  Содержание  Следующая V*D*V

Декларация указателя на функцию состоит из объявления функции путём добавления одного уровня косвенности, то есть оператора *, к имени функции. Скобки используются для контроля приоритета:

 

void * f (void *);                функция

void * (* fp) (void *) = f;       указатель на функцию

 

Эти указатели обычно инициализируется с помощью имён функций, которые были задекларированы ранее. В вызовах функций имена функций и указатели используются одинаково:

 

int x;

 

  f (& x);                        использование имени функции

  fp (& x);                       использование указателя, ANSI-C

  (* fp)(& x);                    использование указателя, классика

 

Указатель на функцию может быть компонентом  структуры:

 

struct Class { ...

    void * (* ctor) (void * self, va_list * app);

... } * cp, ** cpp;

 

В вызове функции -> имеет приоритет перед вызовом функции, но это не имеет приоритета над разыменовкой с помощью *, то есть во втором примере необходимы круглые скобки:

 

cp -> ctor ( ... );

(* cpp) -> ctor ( ... );

 

Предыдущая  Содержание  Следующая