理解一些疯狂的C / C ++声明

时间:2012-07-10 09:15:53

标签: c++ c

  

可能重复:
  How to understand complicated function declarations?

考虑:

char (*(*x())[5])()

如何剖析这个表达式?

我认为它是一个函数,它返回一个大小为5的数组,其成员是指向函数的指针,它不接收任何输入并返回一个char。

我是对的吗?

2 个答案:

答案 0 :(得分:14)

搜索“左右规则”

在你的情况下,它应该是:

         x          : x is a
         x()        : function
        *x()        : returning pointer to
       (*x())[5]    : a 5-element array of 
      *(*x())[5]    : pointer to
     (*(*x())[5])() : function
char (*(*x())[5])() : returning char

答案 1 :(得分:12)

我最近在Stack Overflow上看到了很多奇怪的声明。

当我懒惰时,我使用cdecl.org

  

“将x声明为函数,返回指向返回char的函数指针的数组5的指针”

如果没有,则有clockwise spiral rule< - AWESOME