| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5953 人关注过本帖
标题:j=5,q=(j++)+(j++)+(j++),为什么q的结果是22呢?
取消只看楼主 加入收藏
chenji992
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
j=5,q=(j++)+(j++)+(j++),为什么q的结果是22呢?
首先希望老大们热情帮助我一下了!先行谢了!
程序如下:
main(){

  int i=5,j=5,p,q;

  p=(i++)+(i++)+(i++);

  q=(++j)+(++j)+(++j);

  printf("%d,%d,%d,%d",p,q,i,j);

}

我用的是VC 6.0试运行,屏幕打出来的是:
15,22,8,8

即,q的结果是22。这个结果我书上的不一样,书上的是24。
从程序本身来看,结果应该要么是21,要么是24才对呀。
这是谭浩强C语言教程上的一个例题。

为什么用Visual C++运行上面程序的q的结果是22,是不是Tubro C运行的结果才是22(我没有用TC运行过)?
这其中的原因是什么?请各位老大们不吝赐教了。



[ 本帖最后由 chenji992 于 2010-1-13 18:03 编辑 ]
搜索更多相关主题的帖子: 结果 
2010-01-13 17:58
chenji992
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-12
收藏
得分:0 
在论坛中搜的的答案,但我看了还是很晕啊(初学者,不要见怪啊):
#include <stdio.h>
int main(void)
{
    int j=5,q;
    q=(++j)+(++j)+(++j);
    printf("j=%d,q=%d",j,q);
}
用Visual C++ 6.0编译
输出j=8,q=22
用VC中的debug反汇编:
q=(++j)+(++j)+(++j);
0040102F   mov         eax,dword ptr [ebp-4]  //把j的值传到寄存器EAX,dword ptr [ebp-4]存放的是变量j
00401032   add         eax,1                  //EAX加1
00401035   mov         dword ptr [ebp-4],eax   //EAX的值传到变量j,这两步实现第一个++j,此时j=6
00401038   mov         ecx,dword ptr [ebp-4]   //把j的值传到寄存器ECX
0040103B   add         ecx,1                   //ECX加1
0040103E   mov         dword ptr [ebp-4],ecx   //ECX的值传到变量j,这两步实现第二个++j,此时j=7
00401041   mov         edx,dword ptr [ebp-4]    //把变量j传到EDX
00401044   add         edx,dword ptr [ebp-4]    //再加上j的值,这一步实现了第一个加号的加法运算,内存中j变量的值仍是7
00401047   mov         eax,dword ptr [ebp-4]    //把j的值传到寄存器EAX
0040104A   add         eax,1                    //EAX加1
0040104D   mov         dword ptr [ebp-4],eax    //把EAX的值传送到变量j中,此时,变量j在内存中的值是8
00401050   add         edx,dword ptr [ebp-4]    //EDX加上j的值,EDX中存放的是前面的第一个加法运算的结果14,最后EDX的值为22
00401053   mov         dword ptr [ebp-8],edx    //把运算结果传到内存中变量q的地方,所以最后变量q为22
2010-01-13 18:33
快速回复:j=5,q=(j++)+(j++)+(j++),为什么q的结果是22呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016105 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved