C语言指针(*p++、(*p)++、*(p++)、*++p、++*p的区别)

 

目录

*p++、(*p)++、*(p++)、*++p、++*p的区别

一、三个关键点

二、三个关键点的理解

3、结合性 三 

1)*p++

2)*(p)++

3)*(p++)

4)*++p

5)++*p: 

具体数值的++是直接加。



*p++、(*p)++、*(p++)、*++p、++*p的区别


一、三个关键点

1.前置++ (即++p),后置++ (即p++) ,*0等4个运算符优先级
2. 优先级相同情况下的结合性
3.前置++和后置++的运算结果 


二、三个关键点的理解

优先级:
0>后置++ >前置++和* 


3、结合性 三 


结合性的过论是建立在同一优先级的,也就是说,只有在优先级相同的情况下,我们才讨论结合性,*它决定了运算符的匹配方式*
举例:
赋值运算符+=和-=处于同一优先级,结合方向是 自右向左,那么7+=3-=2,运算顺序就是先算3-=2,结果为1,然后再算7+=1,结果为8
+ +p的运算结果是什么? p+ +的运算结果又是什么?
++p: 先对p做一次自增,再使用p的值,
p++: 先使用p的值,再对p做一次自增.
案例解释
为了便于理解,我们有如下假设:
p指向地址为0x00的内存,里面存了整型2,0x04地址里存了整型3.


1)*p++

  对0x00这个地址解引用拿到内存中存取的值为2.

2)*(p)++

先分析优先级,有括号,先计算括号内,即先计算(p)得到,再计算X++。 p对p指向的地址解引用拿到内存中存放的2,即x的值为2,2++得到3,最终整个表达式结果为3; 

3)*(p++)

*(p++),是先对指针P进行++运算,然后再取取值,由于*和++的运算优先级一样,且是右结合。故*p++相当于*(p++),p先与++结合,然后p++整体再与*结合。

但是,因为++后置的时候,本身含义就是先运算后增加1(运算指的是p++作为一个整体与前面的*进行运算;增加1指的是p+1),所以实际上*p++符号整体对外表现的值是*p的值,运算完成后p再加1。

4)*++p

先讨论优先级,和前置++优先级一样,则讨论结合性,两者结合性均为从右向左,所以++p先计算得到x,再计算X。++p是对p自身做自增,地址+1,得到0x04的地址,即x的值为0x04,再x解引用,拿到0x04地址中存放的内容,即3。最终整个表达式的值
为3;

5)++*p: 

 先讨论优先级,和前置++优先级一样,则讨论结合性,两者结合性均为从右向左,所以先计算p得到x,再计算++x。*p对p指向的地址解引用,得到存放的2,再计算++2,得到整个表达式的值为3。


具体数值的++是直接加。
  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好,奋斗者!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值