为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
白板的微信 2019-08-31 14:33:02
我如何理解以下复杂的声明?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 **));
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

正如其他人所指出的那样,cdecl是这项工作的正确工具。


如果您想在没有cdecl帮助的情况下理解这种声明,请尝试从内到外和从右到左阅读


从列表中取一个随机示例从 X开始,这是声明/定义的标识符(以及最里面的标识符):char (*(*X[3])())[5];


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 数组的指针。


查看完整回答
反对 回复 2019-08-31
?
皈依舞

TA贡献1851条经验 获得超3个赞

听起来像是cdecl工具的工作:


cdecl> explain char (*(*f())[])();

declare f as function returning pointer to array of pointer to function returning char

我四处寻找该工具的官方主页,但找不到一个看似真实的主页。在Linux中,您通常可以期望您选择的分发包含该工具,因此我只是安装它以生成上述示例。


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 406 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信