C语言++运算符前缀与后缀的区别

文章详细阐述了C++中自增运算符a++和++a的差异,主要在于它们的运算顺序和作为左值或右值时的行为。a++先使用变量a的值然后自增,而++a则是先自增再使用新值。a++产生的临时副本不可作为左值,而++a作为左值是安全的,因为它引用的是已自增的变量本身。此外,自增运算符具有右结合性。
摘要由CSDN通过智能技术生成

++a

a++

首要的区别呢,就是一个是前缀加,一个是后缀加。这个时候就会有人说了。你这不废话嘛......

额......

其实这个运算符无论位置在前还是在后,最终的结果都是使得变量a地址存放的值+1。

那么不一样的地方就是其中的过程了:

a++:先进行表达式运算,然后再进行自身值+1

++a:先进行自身值+1,再进行表达式运算

上述仅仅是提到a++和++a作为右值时的表达式

那么其实a++和++a在作为左值的时候又会有所不同

因为由上述现象我们可以知道a++是先进行表达式运算然后再去将自身值+1,那么这个参与表达式运算的是a本身吗?其实不是的,此时参与表达式运算的只是一个临时变量,它是临时存在的,是一份变量a自身的临时副本仅仅用于参与运算。由于它是临时存在的,并不是你程序中已定义的可寻址变量,你无法将右值赋值给它。

由于后面涉及到引用,C编译可能会误判,所以切换到C++

结果显然它不是一个可修改的左值

而++a则没有这个顾虑,因为它是先自增,然后是自身的引用参与表达式运算,引用其实就是变量a的另一个叫法,与变量a是共用同一块内存地址的,所以可以将右值赋值给它。

总的来说,a++是不可以作为左值使用的,但是++a可以

a++是a的临时变量参与的表达式运算,++a是a的引用参与的表达式运算

a++参与表达式运算的值是自增之前的值,++a参与表达式运算的值是自增之后的值

另外它的结合性为右结合,也就是说++a++——>++(a++)

a++b ——> a++ b 缺乏将a++和++b运算的运算符

a++++b——>a++ ++b 也会出错,因为缺乏将a++和++b运算的运算符

a+++++b——>a++ ++ +b,这里会出错,因为a++不能作为左值,所以不能作为操作符++的对象

如有不对的地方,欢迎大家指正!

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值