我如何理解以下复杂的声明?
char (*(*f())[])();
char (*(*X[3])())[5];
void (*f)(int,void (*)());
char far *far *ptr;
typedef void (*pfun)(int,float);
int **(*f)(int**,int**(*)(int **,int **));
最佳答案
正如其他人所指出的,cdecl 是完成这项工作的正确工具。
如果您想在没有 cdecl 帮助的情况下理解这种声明,请尝试从内向外从右向左阅读
从列表中随机抽取一个示例 char (*(*X[3])())[5];
从 X 开始,这是正在声明/定义的标识符(也是最里面的标识符):
char (*(*X[3])())[5];
^
X是
X[3]
^^^
X 是 3 的数组
(*X[3])
^ /* the parenthesis group the sub-expression */
X 是一个包含 3 个 指向
的指针的数组(*X[3])()
^^
X 是一个包含 3 个指针的数组 接受未指定(但固定)数量的参数的函数
(*(*X[3])())
^ /* more grouping parenthesis */
X 是一个包含 3 个函数指针的数组,函数接受未指定(但固定)数量的参数 并返回一个指针
(*(*X[3])())[5]
^^^
X 是一个包含 3 个指针的数组,该函数接受未指定(但固定)数量的参数并返回一个指针 指向一个包含 5 个数组的数组
char (*(*X[3])())[5];
^^^^ ^
X 是一个包含 3 个函数指针的数组,该函数接受未指定(但固定)数量的参数并返回一个指向 5 char 数组的指针。
关于c - 我如何理解复杂的函数声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448849/