指针的话, 自己是要学会自己去理解各种组合. 首先只要定义复杂指针肯定会涉及到运算符优先级
根据运算符优先级判断这个定义的含义
指针的定义识别
由运算符优先级判断
下面列出常见到的运算符
[]
中括号这个的优先级最高, 跟括号并列.(排除域运算符).
从左到右的结合性 -意味着p[]
中[]
会先跟p结合
而不是中括号右边的内容()
与之结合成为函数
从左到右的结合性*
其次是这个符号
从右到左的结合性
两个大头int *p[3]
和int (*p)[3]
前者由于[]
的优先级更高p与之结合说明p是数组*得到p本质是什么 数组OR指针*
再与*
结合说明数组中的元素是指针*第二次结合 如果第一次是数组-则为数组中的内容, 第一次是指针-则为指针的指向*
再与int结合 说明数组中指针指向的是int
后者*
先与p结合说明p是一个指针
再与[]
结合说明指针指向的内容是数组
再与int结合说明数组中的内容是int
本质上定义函数相关的也可以这样理解int p(int)
和int (*p)(int)
前者p先与()
结合说明p是一个函数
在查看括号中的内容说明有int的参数
最后与左侧int结合说明返回类型
后者p先与*
结合说明p是一个指针
与()
结合说明指针指向的是函数
在查看括号中的内容说明有int的参数
最后与左侧int结合说明返回类型
判断指针的类型
去除指针声明语句中的指针名称, 剩下的部分就是指针的类型.int* p
得到int*
, 说明指针的类型是int*
int (*p)[3]
说明指针的类型是int (*)[3]
指针指向的类型
去除指针声明语句中的指针名称, 以及名称左边的指针声明符, 剩下的部分是指针指向的类型
`int p得到
int说明指针指向的类型就是
intint (*p)[3]
得到
int()[3]说明指针指向的类型就是
int()[3]`
指针的值
指针存储的即为指向一个内存区域的地址值