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

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

最近在刷题的时候遇到前缀自增、后缀自增以及取值符号之间的组合问题,这里记录一下:

问题提出

之前我一直理解的是前缀++优先级高于后缀++,然后我在翻阅C++优先级顺序表时却发现后缀++的优先级其实是高于前缀++和*的,但是为什么我们通常都说后缀++是等当前表达式完成再自增呢?

解答

然后我看了Effective C++发现:
前缀++与后缀++
也就是说,对于前缀++而言,首先自增然后再返回一个值,但是对于后缀++而言,首先返回值,然后再对该值自增,下面看几个例子:
后缀运算符++优先级高于前缀运算符++和*
后缀++结合律从左至右(先返回值后自增)
前缀++和*优先级相同结合律从右至左
例如:

  1. *p++与*(p++)相同,后缀++优先级更高,但后缀++先返回值(指针p),指针p与*结合之后,指针p再++,因此对应的结果是,输出指针p在自增前对应的值,指针p自增。
  2. (*p)++ 括号优先级最高,因此先对指针p取值,然后后缀++先返回值*p,再对*p这个整体自增,因此对应结果是输出*p的值,之后*p的值自增1,指针p指向的位置不变。
  3. *++p 即*(++p),最左是*,但后面跟的是表达式 ++p 所以要先算++p
  4. ++*p 即++(*p),最左是++ 但后面跟的是表达式*p 所以要先算*p (感谢@weixin_42004700更正)
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值