|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
void main()
{
int i = 5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",i,j,p,q);
}
答案分别是 8 8 15 22
明白为什么是15 不明白其他三个
int i = 5, j = 5, p, q;
01014D3E C7 45 F8 05 00 00 00 mov dword ptr [i],5
01014D45 C7 45 EC 05 00 00 00 mov dword ptr [j],5
p = (i++) + (i++) + (i++);
01014D4C 8B 45 F8 mov eax,dword ptr [i]
01014D4F 03 45 F8 add eax,dword ptr [i]
01014D52 03 45 F8 add eax,dword ptr [i]
01014D55 89 45 E0 mov dword ptr [p],eax
01014D58 8B 4D F8 mov ecx,dword ptr [i]
01014D5B 83 C1 01 add ecx,1
01014D5E 89 4D F8 mov dword ptr [i],ecx
01014D61 8B 55 F8 mov edx,dword ptr [i]
01014D64 83 C2 01 add edx,1
01014D67 89 55 F8 mov dword ptr [i],edx
01014D6A 8B 45 F8 mov eax,dword ptr [i]
01014D6D 83 C0 01 add eax,1
01014D70 89 45 F8 mov dword ptr [i],eax
q = (++j) + (++j) + (++j);
01014D73 8B 45 EC mov eax,dword ptr [j]
01014D76 83 C0 01 add eax,1
01014D79 89 45 EC mov dword ptr [j],eax
01014D7C 8B 4D EC mov ecx,dword ptr [j]
01014D7F 83 C1 01 add ecx,1
01014D82 89 4D EC mov dword ptr [j],ecx
01014D85 8B 55 EC mov edx,dword ptr [j]
01014D88 83 C2 01 add edx,1
01014D8B 89 55 EC mov dword ptr [j],edx
01014D8E 8B 45 EC mov eax,dword ptr [j]
01014D91 03 45 EC add eax,dword ptr [j]
01014D94 03 45 EC add eax,dword ptr [j]
01014D97 89 45 D4 mov dword ptr [q],eax
也就是说,我的编译器是这样做的 p = i + i + i;
i += 1;
i += 1;
i += 1;
j += 1;
j += 1;
j += 1;
q = j + j + j;
#include <stdio.h>
int main(void)
{
{
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j);
printf("%d,%d,%d,%d\n", i, j, p, q);
}
{
int i = 5, j = 5, p, q;
p = i + i + i;
i += 1;
i += 1;
i += 1;
j += 1;
j += 1;
j += 1;
q = j + j + j;
printf("%d,%d,%d,%d\n", i, j, p, q);
}
return 0;
}
#include <stdio.h>
int main(void)
{
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j);
printf("%d,%d,%d,%d", i, j, p, q);
return 0;
}
|
|