当前位置:编程学习 > C/C++ >>

寻C语言高手。。。

,为什么结果是,谢谢。
追问:の。。。高深,能通俗点么。。。

答案:在VC++6.0的菜单项view->Debug Windows->Disassembly(或Alt+8)可在反汇编窗口中看到C语言对应的汇编语言程序,如下:
在这里,可以看到,x的存储单元是[ebp-4],y的存储单元是[ebp-8]

5: y=++x+(++x)+(++x);
0040102F mov eax,dword ptr [ebp-4] 前三步实现的是上式中最右边的括号中的操作(++x)
00401032 add eax,1
00401035 mov dword ptr [ebp-4],eax 此时,x=4
00401038 mov ecx,dword ptr [ebp-4] 接着三步实现的是上式中中间的括号中的操作(++x)
0040103B add ecx,1
0040103E mov dword ptr [ebp-4],ecx 此时,x=5
00401041 mov edx,dword ptr [ebp-4] 这一步取出x放在edx寄存器中
00401044 add edx,dword ptr [ebp-4] 这一步实现x与x的相加,也就是后两步(++x)+(++x),此时dx中放着这个计算结果10
00401047 mov eax,dword ptr [ebp-4] 接着三步实现的是上式中最左边的++x
0040104A add eax,1
0040104D mov dword ptr [ebp-4],eax 此时,x=6
00401050 add edx,dword ptr [ebp-4] 拿dx的值也就是(++x)+(++x)与最左边的++x的结果x=6相加得16
00401053 mov dword ptr [ebp-8],edx 把最终的计算结果dx放在y的存储单元,y=16
这样,x=6,y=16

我想应该是这样的

y=++x 这里没括号,系统会识别计算方式为 y=(++x)+(++x),++x

所以y=4+4+4+4=16

至于X 也是根据 ++x 来算的

x=+x

不知道正确 不呵呵

x自加了三次,所以x=6;

首先++x,此时x=4,然后再++x,此时x=5,加法只要两个参数就可以,所以此时会运算得到一个结果10,此值暂存在某处,然后++x,此时x=6,加法又满足了两个参数,10+6=16

结果应该是x=6,y=18吧?

int x=3,y;

y=++x+(++x)+(++x)

x=6为什么?

因为x=3 有三个++ 。

第一个++完成后x=4

第二个++注意就是5了,

第三个++注意就是6了,x=6了。

再输出时(x=6)了

++x //在用之前x=x+1 如 x=3;y=x++;y=y+10 printf("%d",y) 结果为:13

如 x=3;y=++x;y=y+10 printf("%d",y) 结果为 :14

x++ //用完之后x=x+1 如上面说的

注意:如x=3; printf("%d,%d",x,x++) 和 printf("%d,%d",x++,x)是有区别的,前者是3,3后者是3,4);

y=16这与编译器有关,结果不唯一,但有个ANSI标准

有的编译器处理是 x=3;y=++x+(++x)+(++x) 先让x++全部加完为6 相当于++x;++x;++x; 然后全部相加哦18

你的y=16的结果可能是编译器的问题,(但是那也是4+5+6=15)为了使程序更清晰不要使用多层++--的。可读性很差,若你是熟练高手那就完全没问题了。 本程序Turbo c/c++ 3.0验证过

这可能是和系统有关系吧。我运行这个程序没有错误,x=6,y=18,

也就是说x先自加3次,然后3个x相加。

上一个:C语言程序设计
下一个:C语言如何学!

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,