关于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里面的+号表示是正号的意思

猜你喜欢

转载自blog.csdn.net/answerw3i/article/details/80300777