Какой синтаксис для объявления массива указателей на функции без использования отдельной typedef? - PullRequest
42 голосов
/ 23 февраля 2011

Массивы указателей на функции могут быть созданы следующим образом:

typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};

Каков синтаксис для создания массива указателей на функции без использования typedef?

Ответы [ 3 ]

82 голосов
/ 23 февраля 2011
arr    //arr 
arr [] //is an array (so index it)
* arr [] //of pointers (so dereference them)
(* arr [])() //to functions taking nothing (so call them with ())
void (* arr [])() //returning void 

поэтому ваш ответ

void (* arr [])() = {};

Но, естественно, это плохая практика, просто используйте typedefs:)

Дополнительно: Хотите знать, как объявить массив из 3 указателей на функции, принимая int и возвращая указатель на массив из 4 указателей на функции, принимающие double и возвращающие char?(как это круто, да? :))

arr //arr
arr [3] //is an array of 3 (index it)
* arr [3] //pointers
(* arr [3])(int) //to functions taking int (call it) and
*(* arr [3])(int) //returning a pointer (dereference it)
(*(* arr [3])(int))[4] //to an array of 4
*(*(* arr [3])(int))[4] //pointers
(*(*(* arr [3])(int))[4])(double) //to functions taking double and
char  (*(*(* arr [3])(int))[4])(double) //returning char

:))

14 голосов
/ 23 февраля 2011

Помните "использование имитации делькарации".Таким образом, чтобы использовать указанный массив, вы бы сказали

 (*FunctionPointers[0])();

Правильно?Поэтому, чтобы объявить это, вы используете то же самое:

 void (*FunctionPointers[])() = { ... };
4 голосов
/ 23 февраля 2011

Используйте это:

void (*FunctionPointers[])() = { };

Работает как все остальное, вы ставите [] после имени.

...