复杂的声明表达式qustion

时间:2016-06-04 22:09:58

标签: c

我有这个表达式int *(* foo())[30]

  

是foo函数(不接收参数)并返回指向整数指针数组(大小为30)的指针?

1 个答案:

答案 0 :(得分:1)

没有

您可以按正常评估表达式的相反顺序解码声明。

正常评估顺序:

  1. foo
  2. foo()
  3. *foo()
  4. (*foo())[30]
  5. *(*foo())[30]
  6. 所以这个宣言是:

    1. *(*foo())[30]指针
    2. (*foo())[30] 指针数组
    3. *foo()指向指针数组的指针
    4. foo()返回指针数组指针的函数
    5. foo
    6. 所以这个声明意味着“一个函数foo,它返回指向int”指针数组的指针。

      你错了的地方是这里没有指定foo的参数个数,所以它的参数个数不一定是零。