j=1,i=(++j)+(++j)+(++j);结果i=18,j=6 为何?

来源:百度知道 编辑:UC知道 时间:2024/06/20 09:31:04

答案错了, i=9,j=4

答案有误,应该是i=10;j=4;

源程序:
int j=1;
int i;
i= (++j) + (++j) + (++j) ;
printf("%d,%d",i,j);

编译成汇编语言后如下:
9: int j=1;
mov dword ptr [ebp-4],1
10: int i;
12: i= (++j) + (++j) + (++j) ;
mov ecx,dword ptr [ebp-4]
add ecx,1
mov dword ptr [ebp-4],ecx
mov edx,dword ptr [ebp-4]
add edx,1
mov dword ptr [ebp-4],edx
mov eax,dword ptr [ebp-4]
add eax,dword ptr [ebp-4]
mov ecx,dword ptr [ebp-4]
add ecx,1
mov dword ptr [ebp-4],ecx
add eax,dword ptr [ebp-4]
mov dword ptr [ebp-8],eax

重点看12: i= (++j) + (++j) + (++j) ;的,

确实有问题耶
如果理解无误,可以这样写程序吧?
#include <stdio.h>

int main()
{
int i,j=1;
i=(++j)+(++j)+(++j);
printf("%d\n%d",i,j);<