i++ (后缀增量)先自增后赋值
x=i++,
先将i的当前值赋给x,然后再将i +1
++i (前缀增量)先赋值后自增
x=++i,先将i +1,然后把i增加后的值赋给x
★★★++a increment of one before you use it in an expression(表达式),and a++do it later
(++a在表达式中使用前就+1了,a++要在表达式结束后(;)a才+1
eg
1.
var arr = ['banana', 'apple'];
var a = 0,
b = 0;
arr[a++]; // print: banana ==> arr[0]
arr[++b]; // print : apple ==> arr[1]
(a在arr[a++]结束(;)后才+1;b在arr[++b](arr[]前,++b后就自增了)
2.
int m=3,n=4,x;
x=m++;
++n;
x=x+8/n;
printf("%d,%d\n",x,m);
//结果--4,4
3.★
for(int i=0;i<2;i++)
{
printf("%d ",i);
}
printf("\n");
for(int i=0;i<2;++i)
{
printf("%d ",i);
}
printf("\n");
for循环中,i++和++i的最终效果是相同的,两者都会使i的值+1,并且这个增加操作都是在每次迭代循环结束后执行的。
对于for循环,唯一的区别是,面对复杂的数据类型,++i因为不需要创建一个临时变量来储存原始值而相对i++稍微高效些,但对于简单的整型变量,现代编译器通常会优化掉这种差异。(有些程序员倾向于在不需要旧值的情况下使用++i,认为这样更能表达意图,这就是代码风格的问题了)
★这两者之间的区别只有当数值被使用在表达式中才重要(only matters when the value is used in an expression)