Какой синтаксис для объявления массива указателей функций без использования отдельного typedef?
Массивы указателей функций могут быть созданы следующим образом:
typedef void(*FunctionPointer)();
FunctionPointer functionPointers[] = {/* Stuff here */};
Каков синтаксис для создания массива указателей функций без использования typedef?
Ответ 1
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
:))
Ответ 2
Помните, что используются "имитации delcaration". Поэтому, чтобы использовать указанный массив, вы скажете
(*FunctionPointers[0])();
Правильно? Поэтому, чтобы объявить это, вы используете то же самое:
void (*FunctionPointers[])() = { ... };
Ответ 3
Используйте это:
void (*FunctionPointers[])() = { };
Работает как и все остальное, вы помещаете [] после имени.