在c语言中最令然头疼的莫过于指针
特别是指针和数组符号一起出现的
傻傻搞不清楚的原因主要在于运算符的优先级没有搞清
指针的运算符*,数组运算符[],函数运算符();
[]数组元算符 运算优先级和函数运算符()或者说强制改变运算顺序符号()都是位于第一优先级的
而我们的指针运算符则是第二优先级
所以当出现
int *a[];
[]比*优先和名称结合,这个时候先结合就代表其属性 肯定是一个数组 数组里面存放着什么?
然后继续结合 *指针 所以就指针数组 最后结合int 指针指向int类型
int *a();
同理可以得到
()和a先结合得到 函数,然后结合* 函数返回指针,最后结合int得到 函数返回指针,指针指向int类型
当我们使用()来改变运算符的结合顺序的时候
比如
int (*a)();
*先和名称结合 得到指针,然后结合()得到函数,所以是指针指向一个函数,然后结合int ,
我们就可以得到 一个函数指针 返回int类型。
最后我们来检验一个比较糟糕的东西
能写出这种东西的人 就应该被人道毁灭
除了考试能用到 我不相信有人在实际开发的时候自己也会用这一坨屎
char ( *( *x[3]) () ) [5]
是在是太糟糕了 不过继续我们的分析
x[3]:数组
*x[3]:指针数组
(*x[3])():指针数组,指针指向函数
*(*x[3])():函数返回的是指针
(*(*x[3])())[5]:函数返回的指针是指向数组的指针
最后结合char:函数返回的指针指向的数组,数组中的元素是char型的
综上,x是一个指针数组,它里边元素是指向返回值为char [5],无参数的函数