大家第一时间想到i++与++i的区别就是一个是先加再用,一个是先用再加。
相同点:
#include<stdio.h>
int main()
{
int a = 10;
a < 20;
a++;
printf("%d", a);
return 0;
}
上述代码打开反汇编,显示出来的机器码是这样的
而当我们输入代码
#include<stdio.h>
int main()
{
int a = 10;
a < 20;
++a;
printf("%d", a);
return 0;
}
它所体现出来的反汇编机器码是这样的
会发现在a++与++a没有赋值对象的时候(也就是说单纯的个体a++与++a)是等价的,都是将这个值赋值给CPU寄存器中,然后加1来进行计算的。
不同点:
#include<stdio.h>
int main()
{
int a = 10;
int b = 0;
a < 20;
b=++a;
printf("%d", b);
return 0;
}
它的反汇编机器码:
而:
#include<stdio.h>
int main()
{
int a = 10;
int b = 0;
a < 20;
b = a++;
printf("%d", b);
return 0;
}
反汇编机器码:
总结:
在a++与++a有赋值对象的时候确实一个是先加后用另一个是先用后加。
没赋值对象的时候两者是等价的!
欢迎大家评论区讨论交流,下期再见!