++i和i++有什么区别 请举例说明 谢谢
i++和++i命令的区别有:
1、赋值顺序不同
++i是先加后赋值;i++是先赋值后加;++i和i++都是分两步完成的。
因为++i是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i=a=b,即++i是一个左值;i++的后面一步是自增,不是左值。
形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
2、效率不同
比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中++i比i++效率要高些。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。
3、i++不能作为左值,而++i可以。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。
但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
比如:
inti=0;
int*p1=&(++i);//正确
int*p2=&(i++);//错误
++i=1;//正确
i++=1;//错误
扩展资料:
1、C语言中,赋值运算的操作是有方向的,即将右侧表达式的值(也称为右值)赋值左侧的变量,只能是标识一个特定存储单元的变量名。
2、由于变量名只能出现在赋值运算符的左边,因此它也被称为左值;由于常量只能出现在赋值运算符的右边,因此它也被称为右值。左值可以用作右值,但右值不能用作左值。
而 a = ++i,相当于 i=i+1; a = i;
而 a = i++,相当于 a = i; i=i+1;
比如
int i=2;
a=++i;
i=2;
b=i++;
在运行之后
a就等于3 b就等于2
j=++i;//j=1,i=1,参与运算前自加1
j=k++;//j=0,k=1,参与运算后自加1