love_c 发表于 2011-3-23 00:03:05

求助!关于+++的问题

x=y=7;
   z=x+++y;
得出的结果是14,而我认为应该是15.因为x先自加一变成8,再加上y结果就是15,可为什么VC++6.0编译出来的结果是14呢?困惑中!求解!:(

小甲鱼 发表于 2011-3-23 11:34:48

编译器的设置问题,我这边用VC6输出是15.

love_c 发表于 2011-3-24 23:01:03

谢谢小甲鱼老师!

追梦1航海 发表于 2014-3-17 12:06:13

我的vc输出来是14,来看下对应的汇编指令吧
5:      int x,y,z;
6:            x=y=7;
00401028   mov         dword ptr ,7
0040102F   mov         eax,dword ptr
00401032   mov         dword ptr ,eax
7:            z=x+++y;
00401035   mov         ecx,dword ptr
00401038   add         ecx,dword ptr    //把x和y相加结果放入ecx中
0040103B   mov         dword ptr ,ecx //ebp-0ch处存放的是z变量的值
0040103E   mov         edx,dword ptr //x放入edx中
00401041   add         edx,1//x自加
00401044   mov         dword ptr ,edx//结果是x=x+1了
8:      printf("%d",z);
00401047   mov         eax,dword ptr
0040104A   push      eax
0040104B   push      offset string "%d" (0042201c)
00401050   call      printf (00401080)
00401055   add         esp,8
9:
10:   }
哈哈,当你输出x的时候你发现结果是8,原来vc是这样理解的
z=(x++)+y,为什么会如此理解,这下你明白了吧,先是7+7,.等赋值给z之后,然后是x++因为是后加啊,!!!!!!!!!!!而为什么不是z=x+(++y)呢,因为编译的时候是从左向右边扫描的,当发现,x后面有两个++就匹配x啦!!!!!!
页: [1]
查看完整版本: 求助!关于+++的问题