c中的函数指针声明

时间:2012-06-26 11:48:27

标签: c

我正在经历k& r复杂的声明部分。我对这个特殊声明产生怀疑。

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

为什么不能 char[5] (*(*x[3])())  这个宣言可以合法吗?

 int* (*(*x)())[2];

1 个答案:

答案 0 :(得分:1)

根据运算符的优先级并应用螺旋规则,

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

相当于

  

x是函数的指针数组,返回指向数组的指针   炭

但是,

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

数组下标应该在声明的末尾,因此导致语法错误。将螺旋规则应用于此时,您将碰到nothing

另外,

int* (*(*x)())[2]; 

是完全合法的,其声明可以表示为

  

x是指向函数的指针,返回指向指针数组的指针   INT

查看Java applet,它可以帮助您解码复杂的声明,并阅读这些articles如何形成复杂的声明。

@Steve Jessop的评论似乎也很合理为什么[]最终会发生。