| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1871 人关注过本帖
标题:y=(++x)+(++x)+(++x)为何为是19
只看楼主 加入收藏
kobejay
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-3-16
收藏
 问题点数:0 回复次数:31 
y=(++x)+(++x)+(++x)为何为是19
大家好啊,我在学习c++中遇到一个问题,连老师都讲不清楚啊,希望大家能帮我一把!
问题是这样的:
#include <iostream.h>
void main()
{
 int x(4),y;
 y=(++x)+(++x)+(++x);
 cout<<"y="<<y;
}
编译后y的值为19,但是y的值是由三个连续的数相加的,没可能是19,到底是怎么回事呢?
编译系统:Windowsxp+sp2 Microsoft Visual C++6.0
搜索更多相关主题的帖子: void Microsoft include 
2005-03-16 15:30
鬼魅
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-3-20
收藏
得分:0 
应该是18把。。。19真的不知道了
2005-03-20 21:00
coloar123
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2005-1-6
收藏
得分:0 
可以用其他的数字测试一下

比如是3

两耳不闻窗外事,专心只读圣贤书
2005-03-20 22:21
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
收藏
得分:0 
因为求解表达式时有扫描的,不同的C版本的扫描方式和计算方法不同。

2005-03-21 10:15
terran
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-3-17
收藏
得分:0 
试了一下果然是这样。vc6先算前两个++x,结果是12,三个的话加7是19,四个再加8是27!

[此贴子已经被jdytz于2005-4-26 0:12:36编辑过]



2005-03-22 11:20
hide
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-3-21
收藏
得分:0 
回复
对++运算理解错误,x++和++x都是x=x+1简写形式。作用是让变量x在内存中的自增1,然后x++(或++x)变为x,所以对上边的表达式的运算可以分解为第一步:y=x+(++x)+(++x)
此时内存中x=5,但此时不存在一个数与x相加,所以第一个++x仅仅是变为变量x;第二步
y=x+x+(++x)此时内存中x=6,而且前两个变量x相加得12,并将12保存在临时的内存区域中。第三步y=12+x 此时x在内存中为7,y=12+7=19。
   这儿的关键就是x++或++x自增后仍然是一个变量而不是一个数值,大家可以尝试计算一下
int x=4,y;y=++(++x);cout<<y;,结果为6,因为++x自增后仍然是变量x,x在进行括号外的一次自增后变为6,然后将x的值赋给y
      这并不是人的问题,也不是计算机的问题,所以大家以后尽量少用复杂的带有危险性的运算
2005-03-22 12:58
peterpan1977
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-3-23
收藏
得分:0 
我的建议
你可能是不是没有赋Y的初值,
这一句改成:
int x(4),y(0);
试试看;
我想值应该是18
2005-03-23 17:17
coloar123
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2005-1-6
收藏
得分:0 
用不同的測試軟件會得出不同的結果

两耳不闻窗外事,专心只读圣贤书
2005-03-23 22:01
heqian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-3-30
收藏
得分:0 

hide说的有理。

这就是我不喜欢C语言的主要原因之一:太灵活而缺乏严谨,要知道代码不是写给电脑看的,是写给人看的!所以写健壮的程序有关键的一条:易读性


水唯善下方成海,山不矜高自及天
2005-04-03 20:40
heqian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-3-30
收藏
得分:0 

我的编译出来是21 !!!!!

还有没有不同结果的?


水唯善下方成海,山不矜高自及天
2005-04-04 21:44
快速回复:y=(++x)+(++x)+(++x)为何为是19
数据加载中...
 
   



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

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