如何判断声明的是什么
第一步:通过优先级来判断
例如:
int (p)[] //()的优先级高于[],
//因此p与()结合,
//即(p),很明显这是一个指针
int p[] // 的优先级小于[],
// 因此p与[]结合
//即p[],很明显这是一个数组
int (p)() //两个()优先级相同,那么从左到右按顺序运算
//即(p),这是一个指针
int p() //()优先级高于
//p(),这是一个函数
第二步:
如果是指针,则考虑指针指向的内容
如果是数组,则考虑数组的数据类型和数组长度
如果是函数,则考虑函数的参数列表和返回值
例如:
int (*p)[] //前面提到这是一个指针
//则考虑指向的内容
//很明显指针指向的是数组
//即指向数组的指针(数组指针)
int p[8] //数组
//考虑数据类型和大小
//数据类型:int 大小:8
//即存储int型指针的数组(指针数组)
int (p)() //指针
//考虑指向的内容
//指向的是函数,函数无形参,返回值为int型
//即指向函数的指针(函数指针)
int *p() //函数
//考虑参数列表和返回值
//参数列表:无形参 返回值:int型指针
//即返回int型指针的函数(指针函数)