| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 707 人关注过本帖
标题:为什么会显示这样的结果
只看楼主 加入收藏
ykyz310
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-9
收藏
 问题点数:0 回复次数:9 
为什么会显示这样的结果
小弟刚学习C 还请大虾们赐教

void 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);
getch();
}
显示结果:15 24 8 8

为什么一个是15 尔而另外一个是24 ?
搜索更多相关主题的帖子: 结果 
2009-11-10 15:32
hsm8592
Rank: 2
等 级:论坛游民
帖 子:55
专家分:57
注 册:2009-11-6
收藏
得分:0 
同样的贴子有很多 你收一下就知道了
2009-11-10 15:47
xy4919961
Rank: 5Rank: 5
等 级:职业侠客
帖 子:199
专家分:362
注 册:2009-10-24
收藏
得分:0 
++j;j是先加1后用;j=5从右向左先加1,j=6;然后在加1;j=7 再加 1;j=8;
 所以q= 8+8+8;q=24;
i++;i是先用后加1 所以 p=5+5+5; p=15;然后i再加3次1.所以 5+1+1+1=8;
   楼主应该理解了吧。?

[ 本帖最后由 xy4919961 于 2009-11-10 16:08 编辑 ]

QQ群:96348241
2009-11-10 15:59
tanghuang09
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-29
收藏
得分:0 
请楼主去看看各种运算符号的优先级就会明白了。自加符号实际有两种,一种叫postfix,一种叫prefix,与加号“+”的优先级为 ++(postfix),+,++(prefix),(从左往右依次优先级降低)。
不知我有没有讲清楚?
2009-11-10 16:38
ykyz310
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-9
收藏
得分:0 
好像有点明白了~
2009-11-10 17:01
fungqq
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-11-7
收藏
得分:0 
为什么在VC++6.0中输出为15 24 8 8 ?????
2009-11-10 20:52
fungqq
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-11-7
收藏
得分:0 
发错了不好意思,我在VC++6.0中输出的是15 22 8 8 ,为什么会这样呢?
2009-11-10 20:55
chrispull
Rank: 1
等 级:新手上路
帖 子:30
专家分:1
注 册:2009-8-31
收藏
得分:0 
int i=5,j=5,p,q;
    p=(i++)+(i++)+(i++);
    q=(++j)+(++j)+(++j);
对于 p=(i++)+(i++)+(i++):
i是先引用再自增。虽然有3个i++,但在引用的时候i都保持在5,所以计算p是相当于3个i相加(i没变,为5),p=15;
算完p后,i就要自增,但由于i自增了三次,所以i变为8.
对于q=(++j)+(++j)+(++j);同理,j先自增再引用。j自增了三次,先变成8,之后才是3个i相加(j变了,为8),p=24.
2009-11-10 20:56
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
准确的说,这个是undefined的行为。

以上各楼把结合性和计算顺序弄混了。
以a+b+c
结合性从左到右的约束力是:必须先算a+b的结果,然后再+c。

而强调的是:a b c之间的计算顺序是没有定义的。
如果你觉得会先计算a 然后计算b再计算c然后加起来,那么你就错了。
至少编译器会告诉你,这样的行为想怎么算都可以。
这个例子:a[i++]+a[i++]+a[i++]会比较明显。那么每个a[i++]到底是那个元素,只有编译器知道。




要练习算法就来http:///!!有挑战哦!!
2009-11-10 20:59
fungqq
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-11-7
收藏
得分:0 
回复 8楼 chrispull
我在VC++6.0中输出的是15 22 8 8 ,为什么会这样呢?
2009-11-10 21:18
快速回复:为什么会显示这样的结果
数据加载中...
 
   



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

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