| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5953 人关注过本帖
标题:j=5,q=(j++)+(j++)+(j++),为什么q的结果是22呢?
只看楼主 加入收藏
chenji992
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:12 
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
chenyu_eagle
Rank: 2
等 级:论坛游民
帖 子:6
专家分:15
注 册:2010-1-8
收藏
得分:2 
。。编译器不一样。。结果就有可能不一样。。
2010-01-14 09:22
qingzhu5753
Rank: 4
等 级:业余侠客
帖 子:64
专家分:248
注 册:2009-10-28
收藏
得分:2 
java 1.6中结果 是18 ,21, 8,8
2010-01-16 12:02
doubleshy
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2009-12-26
收藏
得分:2 
应该是编译器的原因
2010-01-16 14:26
ck062
Rank: 2
等 级:论坛游民
帖 子:6
专家分:27
注 册:2010-1-15
收藏
得分:2 
应该是编译器的原因
2010-01-16 16:28
WHDH
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2010-1-16
收藏
得分:2 
我用tc编译   结果是15 24 8 8   编译器啊
2010-01-16 17:10
赵俊伟
Rank: 2
来 自:山东济南
等 级:论坛游民
帖 子:16
专家分:17
注 册:2009-10-20
收藏
得分:2 
我的vc8.0的事15 24 88
2010-01-16 23:00
Devon_Ye
Rank: 4
来 自:广东
等 级:业余侠客
帖 子:124
专家分:282
注 册:2010-1-7
收藏
得分:2 
用VC6.0 结果为:8,8,15,22
用Win-tc结果为:8,8,15,24
看来真的是编译器的区别。
2010-01-18 15:41
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:2 
为什么要这样写表达式呢,分开来写吧

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-01-18 16:28
快速回复:j=5,q=(j++)+(j++)+(j++),为什么q的结果是22呢?
数据加载中...
 
   



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

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