对于练习,我试图:
将fubar
声明为指向函数的指针,该函数获取指向char
的指针并返回指向24个元素的数组的指针,其中每个元素都是指向struct foo
的指针
我的逻辑是:
-fubar是一个指向带有char指针的函数的指针:
(*fubar)(char*)
-...返回一个指向24 elems数组的指针,其中每个elem是一个struct foo:
(struct foo *)(*fubar)(char*)[24]
我的逻辑是否正确?
答案 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]
您可以假装星号属于括号内的标识符(即数组名称)。