如何判断声明的是什么

第一步:通过优先级来判断

例如:
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型指针的函数(指针函数)

posted @ 2022-04-02 16:07  Kirilight  阅读(35)  评论(0)    收藏  举报