- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
  
该用户从未签到
|
main( )
{
int i=3,k;
k = (((++i)+(++i))+(++i));
printf("%d\n",k);
}
这个东西 在Turboc和VC6的执行结果是不一样的
VC6 中是这样的 : 5+5+6 = 16
00401159 |. C745 FC 03000>MOV DWORD PTR SS:[EBP-4],3 ; [EBP-4] 就是K
00401160 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00401163 |. 83C0 01 ADD EAX,1 ; 3+1
00401166 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; 4
00401169 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0040116C |. 83C1 01 ADD ECX,1 ; 4+1
0040116F |. 894D FC MOV DWORD PTR SS:[EBP-4],ECX ; 5 此时 [EBP-4]=5
00401172 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00401175 |. 0355 FC ADD EDX,DWORD PTR SS:[EBP-4] ; 5+5
00401178 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040117B |. 83C0 01 ADD EAX,1
0040117E |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; 10+6
turboc 2.0 中是这样的:6+6+6 = 18
seg000:01BE mov si, 3 ; si = k =3
seg000:01C1 inc si
seg000:01C2 inc si
seg000:01C3 inc si
seg000:01C4 mov di, si ; si = k = 6
seg000:01C6 add di, si
seg000:01C8 add di, si
seg000:01CA push di
seg000:01CB push ds
seg000:01CC mov ax, 94h ; '?
seg000:01CF push ax ; format
seg000:01D0 call _printf
在处理自增运算时 尽量避免在一行指令中对同一变量进行自加运算 否则你将会很麻烦 不行你猜下面这行代码结果是多少:
main( )
{
int i=3,k;
k = ++i+i+++i+i ;
printf("%d\n",k);
}
昨天群里边问道的一个问题 C语言中的问题大家直接在本版块提问即可 |
|