在不使用单独的typedef的情况下声明函数指针数组的语法是什么?

时间:2011-02-23 15:36:18

标签: c++ arrays syntax function-pointers typedef

可以像这样创建函数指针数组:

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

在不使用typedef的情况下创建函数指针数组的语法是什么?

3 个答案:

答案 0 :(得分:80)

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

:))

答案 1 :(得分:14)

记住“声明模仿使用”。所以要使用所说的数组你会说

 (*FunctionPointers[0])();

正确?因此,要声明它,您使用相同的:

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

答案 2 :(得分:4)

使用此:

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

像其他一切一样工作,在名称后面放置[]。