声明返回数组的函数指针

时间:2014-11-25 08:47:38

标签: c pointers function-pointers

对于练习,我试图:

fubar声明为指向函数的指针,该函数获取指向char的指针并返回指向24个元素的数组的指针,其中每个元素都是指向struct foo的指针

我的逻辑是:

-fubar是一个指向带有char指针的函数的指针:  (*fubar)(char*)

-...返回一个指向24 elems数组的指针,其中每个elem是一个struct foo:

(struct foo *)(*fubar)(char*)[24]

我的逻辑是否正确?

2 个答案:

答案 0 :(得分:1)

函数永远不会返回数组,它们可能返回一个指针(通常是指数组的第一个单元格),因为作为返回值或参数,数组衰减到指针。

所以,用typedef声明你的函数签名:

typedef struct foo** funsig_t(char*);

请注意,如果省略typedef,则会声明所需签名功能 funsig_t

然后使用typedef声明一个指针:

funsig_t* fubar;

答案 1 :(得分:1)

修复语法错误并删除struct foo *周围的括号后,

struct foo* (*fubar)(char*)[24]

...你错了的一个部分是它实际上返回了指针的数组,而不是指向数组的指针。为了声明一个指向数组的指针,你需要一组额外的括号:

struct foo (*(*fubar)(char*))[24]

您可以假装星号属于括号内的标识符(即数组名称)。