----------------解决方案--------------------------------------------------------
++a 是先自加
a++ 是后自加,,
单独用是一样的。
但 如:
b = a++;//是先把a的植传给 b ,才自加一
b = ++a;//是先自加一,,才传给b,,,,
是不一样的,
如果先 a = 3;...则 第一个b = 3,,第二个b = 4;
----------------解决方案--------------------------------------------------------
10L的
你要理解a++和++a的概念~~!两个性质是不一样的
4楼解释的很好`
----------------解决方案--------------------------------------------------------
你们这些人都没看轻楼主的代码吗!
楼主的代码 a++; 和 ++a; 是单独的语句。
所以结果应该是一样的,如果不一样那就可能能编译器优化出了的问题。
----------------解决方案--------------------------------------------------------
printf("%d", ++a); 与 printf("%d", a++); 才不一样。
----------------解决方案--------------------------------------------------------
回复 4# 的帖子
是的,自加存在一个进入CPU加法运算器先后的顺序,a++,和++a 进入的时间不一样 ----------------解决方案--------------------------------------------------------
printf("%d", ++a); 与 printf("%d", a++); 才不一样。
/*****************/
a++;
printf("%d\n", a);
与
++a;
printf("%d\n", a);
结果应该是一样的。
a++ 与 ++a 是一个单独的语句,那么不过下加还是后加,到了下一条语句a的值都是 + 1。
/* 帖子不能编辑,所以发了N贴 */
----------------解决方案--------------------------------------------------------
对于第一次a=0,当然运行到下一行时,也就是printf("%d\n",a);然后
a=a+1;此时a=1;
对4楼的最不理解之处就在于上面这句话?!
在这个程序中a++;
++a;
都是单独成语句的
所以这个单独语句执行后,a都被加了1,并不是上面那句“也就是printf("%d\n",a);然后a=a+1;此时a=1;”
困惑中。。。。。。
----------------解决方案--------------------------------------------------------
你要是在printf("%d\n",a++);就是先输出A的值在执行A+=1;要是++A就是先执行A+=1;在输出值,但是要是不在输出语句中就想楼主那样,他们的结构都是要让A自加之后在输出结构。
----------------解决方案--------------------------------------------------------
7: i++;
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,1
0040103C mov dword ptr [ebp-4],eax
8: ++j;
0040103F mov ecx,dword ptr [ebp-8]
00401042 add ecx,1
00401045 mov dword ptr [ebp-8],ecx
i++;
++j;
单独成句,在反汇编中指令的循序是一样的
先是mov 寄存器,内存区
再是add 寄存器,1
然后mob 内存区,寄存器
......
----------------解决方案--------------------------------------------------------