1、int *p[];//指针数组 数组中的元素都是int 类型的指针
2、int (*p)[];//数组指针 p是一个指针,指向一个int类型的数组
3、int *p(); p是一个函数,返回值是int类型的指针
4、int (*p)(); p是一个函数指针,指向的是返回值是int类型的函数
以上可以看出,盯准变量,结合运算符的优先级便可轻易判断
1中 由于[]的优先级比*高,故变量p优先与[]结合,那么变量p则是一个数组,是个什么样的数组呢?数组中的元素都是int* ,故1中变量p则是指针数组
2中由于()的存在,所以变量p优先与*结合,那么变量p则是一个指针,是个什么样的指针呢?是以个指向 int [] 的指针,故2中变量p则是数组指针
3和4如上分析。
char(*(*x())[])():
分析:先看变量x:在括号内部分
*x():则x是一个函数,没有形式参数,返回值是一个指针
*((*x())[]则可以看成 *p [],那么接上面一句话就是x是一个函数,没有形式参数,返回值是一个指针,该指针指向一维数组,数组中的元素都是指针
char(*(*x())[])()则可以看成 char (p)()那么接上面一句话则是x是一个函数,没有参数,返回值是一个指针,该指针指向一维数组,数组中的元素都是指针,指针指向没有形式参数返回值为char类型的函数。