gpt4 book ai didi

c - 我如何理解复杂的函数声明?

转载 作者:太空狗 更新时间:2023-10-29 16:21:55 26 4
gpt4 key购买 nike

我如何理解以下复杂的声明?

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com