i++和++i的区别

写在前面

记得一次写题时将++i写成了i++,怎么也调试不对QAQ,事后也不明白,现在水发一篇总结( ̄y▽, ̄)╭ 

一、赋值顺序

i++在运行时是这样执行的:先赋值,再自加

代码表示为

 
a = i++;  ------------> a = i; i = i + 1;

++i在运行时是这样执行的:先自加,再赋值

代码表示为:

a = ++i --------------------> i = i + 1; a = i;

形象地理解为i++先做别的事,再自己加,++i先自己加再做别的事情

比如i = 3,a = i++就是说a = 3,完成之后让i变成4,a = ++i就是先让i++变成4,然后a = 4

二、效率

i++;++i;就C语言代码来看,i++ 和 ++i 都只有一行,看起来似乎二者的执行效率一样了?(连我这种蒟蒻都知道不是的)

我们先看一下下面这段代码:

int i,a,b;
i = 0;
a = i++;
i = 0;
b = ++i;

查看上述C语言代码对应的汇编代码可见,j=i++; 计算机需要 4 条指令来解释,比执行 k=++i; 多出了一条指令。多出的一条指令为:在对 i 执行自加操作之前,先保存 i 的当前值留作稍后使用(赋值为a)。所以,++i的效率比i++高

三、左值和右值

可能很多人并不知道啥是左值,说白了,左值就是可以放在赋值符左边的变量,而右值是所有不是左值的式子的值

能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址

而i++不能作为左值,++i则可以!!!

例如下面这段代码:

i++ = a; //错误语句
++i = a  //正确

 

你可能感兴趣的:(i++和++i的区别)