指针

  1. 指针的定义识别
    1. 由运算符优先级判断
    2. 判断指针的类型
    3. 指针指向的类型
    4. 指针的值

指针的话, 自己是要学会自己去理解各种组合. 首先只要定义复杂指针肯定会涉及到运算符优先级
根据运算符优先级判断这个定义的含义

指针的定义识别

由运算符优先级判断

下面列出常见到的运算符

[]中括号这个的优先级最高, 跟括号并列.(排除域运算符).
从左到右的结合性 -意味着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说明指针指向的类型就是int
int (*p)[3]得到int()[3]说明指针指向的类型就是int()[3]

指针的值

指针存储的即为指向一个内存区域的地址值


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。