复杂的申报

发布于 2024-11-30 10:43:52 字数 118 浏览 2 评论 0原文

我们如何解释以下声明:

char (*(*f())[])();

如何开发一种方便的技术来阅读 C 中如此复杂甚至更复杂的声明。如果您使用快速技巧,请分享。

How do we interpret the following declaration:

char (*(*f())[])();

How shall one develop a handy technique to read such complicated or even more complicated declarations in C. If you use a quick trick, please share.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黯淡〆 2024-12-07 10:43:52

确实有一个不太为人所知的技巧。假设 f 是一个变量名,而 *()[] 是您可以执行的操作在它上面。使用 C 运算符的优先规则可以看出:

f

可以应用

f()

,然后取消引用

*f()

,然后下标

(*f())[]

,然后取消引用

*(*f())[]

,然后应用

(*(*f())[])()

以给出 char

char (*(*f())[])()

,因此 f 是一个返回的函数指向返回 char 的函数的指针数组的指针。

There is indeed a not-so-well-known trick. Pretend that f is a variable name, and that *, () and [] are operations you can do on it. Use the precedence rules of C operators to wit that:

f

can be applied

f()

and then dereferenced

*f()

and then subscripted

(*f())[]

and then dereferenced

*(*f())[]

and then applied

(*(*f())[])()

to give a char

char (*(*f())[])()

so f is a function returning a pointer to an array of pointers to functions returning char.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文