如何声明一个函数返回一个指向函数的指针返回指针int [3]

时间:2014-09-15 04:29:02

标签: c++ pointers

我正在尝试以下声明:

int (*(*((*foo)(const void *))()))[3];

int (*(*(*foo)(const void *)()))[3];

但是编译器给了我一个错误:

error: 'foo' declared as function returning a function

DEMO

在c ++中完全可以吗?

3 个答案:

答案 0 :(得分:8)

像这样:

int (*(*f())())[10];

甚至更干净(有点):

using array_type = int (*)[10];
using return_type = array_type (*)();

return_type f();

答案 1 :(得分:5)

使用cdecl

cdecl> declare f as function returning pointer to function returning pointer to array 3 of int
int (*(*f())())[3]

答案 2 :(得分:5)

派生声明的工作方式是将声明中的标识符替换为您要派生的新事物。例如,在这里的第一步,从"指针到int [3]" to"函数返回指向int [3]"的指针,我们接受"指向int [3]"的声明,并将标识符更改为函数声明符。

指向int [3]的指针: int(* name)[3];

返回的函数:int(* name())[3];

指向它的指针:int(* (* name)())[3] - 括号需要,否则*绑定到另一个*而不是name

返回的函数:int(*(* name())())[3]