关于这个问题最多的解读一般是“i++是运算后加一,++i是运算前加一”,看到这句话,大脑似乎会了,但这样的理解是否有些肤浅呢?
首先我们要知道,++运算符的优先级高于=赋值符号,因此无论是i++还是++i,始终是先自增再赋值,那么两者的区别究竟体现在哪呢?以下面的代码为例
- 当i++与++i不参与赋值时,本质上都是i=i+1,分别执行method1和method2,我们会发现i++与++1的打印结果均是6.
- 一旦i++与++i参与赋值,分别执行method3和method4,我们会发现a=5,b=6,关键在于下面这句话。
i++其实是先执行i=i+1,再执行a=i(此处的i是自增前的i)
++i同样是先执行i=i+1,再执行b=i(此处的i则变成了自增后的i)
int i=5;
void method1(){
printf("i++=%d\n",i++);
}
void method2(){
printf("++i=%d\n",++i);
}
void method3(){
int a=i++;
printf("a=%d\n",a);
}
void method4(){
int b=++i;
printf("b=%d",b);
}
int main(){
//method1();
//method2();
//method3();
//method4();
return 0;
}
此处只贴出了结论,并没有去进行底层原理的解析,即从内存的角度去研究i++与++i的区别,有兴趣的朋友可以移步这篇文章 直达链接