复杂的申报
我们如何解释以下声明:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
确实有一个不太为人所知的技巧。假设
f
是一个变量名,而*
、()
和[]
是您可以执行的操作在它上面。使用 C 运算符的优先规则可以看出:可以应用
,然后取消引用
,然后下标
,然后取消引用
,然后应用
以给出
char
,因此
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:can be applied
and then dereferenced
and then subscripted
and then dereferenced
and then applied
to give a
char
so
f
is a function returning a pointer to an array of pointers to functions returning char.http://www.antlr.org/wiki/display /CS652/How+To+Read+C+Declarations 提供了一个很好的教程。
http://www.antlr.org/wiki/display/CS652/How+To+Read+C+Declarations gives a good tutorial.