我正在经历k& r复杂的声明部分。我对这个特殊声明产生怀疑。
char(*(*x[3])())[5]
为什么不能
char[5] (*(*x[3])())
这个宣言可以合法吗?
int* (*(*x)())[2];
答案 0 :(得分:1)
根据运算符的优先级并应用螺旋规则,
char(*(*x[3])())[5]
相当于
x是函数的指针数组,返回指向数组的指针 炭
但是,
char[5] (*(*x[3])())
数组下标应该在声明的末尾,因此导致语法错误。将螺旋规则应用于此时,您将碰到nothing
。
另外,
int* (*(*x)())[2];
是完全合法的,其声明可以表示为
x是指向函数的指针,返回指向指针数组的指针 INT
查看Java applet,它可以帮助您解码复杂的声明,并阅读这些articles如何形成复杂的声明。
@Steve Jessop的评论似乎也很合理为什么[]
最终会发生。