关于i++和++i的不同。

关于 i++ 和 ++i 的那点事

这是一篇旧的笔记,今天整理发现的:

i++ 是和 i++都是指自加1,但又有不同的地方:

  1. i++返回的是原来的值,而++i返回的是+1后的值

    a = ++i;  相当于 i = i+1; a=i,即先加后赋值
    a = i++;  相当于 a = i; i = i+1;  即先赋值后加
    
  2. i++不能作为左值,而++i可以作为左值。

左值的概念(中文维基百科):
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。

一般通常认为,左值是可以放到赋值符号左边的变量,但是这不能作为区分左右值的依据,左值和右值最根本的区别在于是否运行取地址&运算符获取对应的内存地址。临时变量是右值。

先挖个坑(大佬的代码验证,但是自己验证有问题,先学波c++先)
int i = 0;
int *p1 = &(++i); //正确
int *p2 = &(i++);//错误
++i = 1; // 正确
i++ = 5; //错误

题目:

int i = 5;
i += ++i;
求i的值;

对于这道题目,java和c运行得出不同的结果:
C语言:
C
对于c语言来说,结果会是12,因为c语言会把后面++i的值赋值给前面的i之后才发生加法运算。
“C语言没有定义求值顺序,i+=++i 标准的未定义行为 ”

Java:
Java
对于java来说,结果是11,因为java里面的i+=++i,会运算成,i=5+(++i)

Python:
Python3
对于python来说,没有i++这个用法,++i里面的+号表示是正号的意思

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值