| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1144 人关注过本帖
标题:C语言中的自增问题
只看楼主 加入收藏
amwdcfw
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2009-5-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
C语言中的自增问题
#include <stdio.h>
int main()
{
int a = 0,j=0;
j=(++a)+(++a)+(++a);
printf("%d",j);
return 0;
}

这个程序运行的结果是"9"
但是问题就在"j=(++a)+(++a)+(++a);"这里,
上面a=0,那么一个"++a"的时候是等于1的,怎么会是3呢?然后三个"++a"相加就等于结果的9
请各位高手指点一下
还有就是最后的"return 0;"在程序里反回一个数值"0"有什么作用?是不是可能不用反回?
搜索更多相关主题的帖子: C语言 
2009-09-19 06:39
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:4 
这问题,我以前看书上说应该是这样回答的
不同的编程器编译的顺序会有所不同!
今天用来回答你把!
另外一就是如果没得必要还是别用这方法吧!
虽然我不是啥高手,但这样写法应该不会完美之写吧!
学习可以,但最好别经常用这种简写的方式!

编程语言视频教程在线播放学习
2009-09-19 07:38
dadayou
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2009-9-19
收藏
得分:1 
这个我也是不大明白,楼上地说编译顺序不同,对于这个例子是怎么个计算的呢?怎么得出9的呢?望指教!
2009-09-19 10:24
liyandong106
Rank: 2
等 级:论坛游民
帖 子:21
专家分:35
注 册:2009-9-4
收藏
得分:1 
还是好好看看书把 。。
看看优先级 就知道结果了,
return 0 可以不用
2009-09-19 10:25
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:2 
a=0;
j=(++a)+(++a)+(++a);  这表达式在TC上从右至左对a自增,再相加。
右边第一个++a后值1,第二个++a后值2,右三++a后值3,然后j=3+3+3   j等于9.
·
这列子要从左加也是这结果,不能确定是从左还是右。
那下面这个列子就可以判断TC对这个表达式是从右处理再加。
a=0;
j=(a--)+(++a)+(++a); 先看从左算起的得数是多少,
左一 a--后值-1,左二 ++a后值0,左三 ++a后值1   j=1+1+1  j等于3 (但运行结果是6,显然不是从左处理起)
·
这种表达式编程要避免,要严究就是上面说的那样,这也是对TC而言,别的编译器则又不同。

努力—前进—变老—退休—入土
2009-09-19 11:15
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:1 
我也运行了一下,发现输出结果的确是9。
但是j=(++a)+(++a)+(++a);
和j=++a;
  j+=++a;
  j+=++a;
是不同的命令,下面的语句得到的输出结果是1+2+3=6;
对于为什么上面的结果是9也不太清楚。
2009-09-19 11:24
amwdcfw
Rank: 1
等 级:新手上路
帖 子:22
专家分:3
注 册:2009-5-21
收藏
得分:0 
虽然问题没有得到实质性的解决,但也学到了一些东西,谢谢各位高手的指点
2009-09-19 12:40
zq88
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2008-6-19
收藏
得分:1 
按优先级算,先算a再三个a相加。
2009-09-19 12:58
已屏蔽
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:124
注 册:2009-9-5
收藏
得分:1 
自增自减的编译顺序很神奇啊
2009-09-19 13:45
萧刚
Rank: 1
等 级:新手上路
帖 子:6
专家分:5
注 册:2009-9-16
收藏
得分:1 
不同的系统有不同的结果  尽量不要这样做  分开写   

int  a=0,x,y,z;
x=a++,y=a++,z=a++;

j=x+y+z;就得到结果了

2009-09-19 17:15
快速回复:C语言中的自增问题
数据加载中...
 
   



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

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