| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 756 人关注过本帖
标题:这个C故障了?求解
只看楼主 加入收藏
shyliuwei
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-5-6
收藏
 问题点数:0 回复次数:15 
这个C故障了?求解
#include <stdio.h>

void main()
{
    int i = 8, y;
    y=(++i) + (++i);
    printf("%d\n%d\n",y,i);
}

这个输出的结果y=20.(VC++ 6.0输出结果) 为什么,不是应该=19吗?

另外
#include <stdio.h>

void main()
{
    int i = 8, y;
    y=(i++) + (i++);
    printf("%d\n%d\n",y,i);
}

这个为什么y=16?(VC++ 6.0输出结果)
搜索更多相关主题的帖子: void include 
2012-05-27 12:05
xiyao0206
Rank: 2
等 级:论坛游民
帖 子:25
专家分:32
注 册:2012-4-23
收藏
得分:0 
楼主,这个我以前也碰到过。我现在也迷糊着呢。按照我的理解是由于VC6编译或是求解顺序的问题。
并不是按照我们理解的哪样顺序求解。这里的顺序应该是先判断有多少个i是++在前,得出一个i值,例如此处是10,然后再将i相加,得到20.
而第二个程序中没有++i,则先计算i+i=16,然后再得到i=10.
比如这个程序,y=18,i=10
#include <stdio.h>

void main()
{
    int i = 8, y;
    y=(++i) + (i++);
    printf("%d\n%d\n",y,i);
}
2012-05-27 12:15
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
收藏
得分:0 
这个问题是很纠结,帮你顶贴我也学习一下!
2012-05-27 12:15
小跳蚤
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:437
专家分:1623
注 册:2011-4-9
收藏
得分:0 
这个我也不太清楚,以前看过,但记得不太清了

这个在c标准里没规定顺序,取决于编译器

我理解的是i自加两次变为10,然后计算两个i的值为20
2012-05-27 12:26
shyliuwei
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-5-6
收藏
得分:0 
然后
#include <stdio.h>

void main()
{
    int i = 8, y;
    y=(++i) + (++i) + (++i);
    printf("%d\n%d\n",y,i);
}

输出的结果是31.。。。更让我纠结。为什么。
求大神解答。
2012-05-27 12:30
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
收藏
得分:0 
得问问你的编译器,不同的编译器出现的结果有可能不同,不要深究这问题!!!
2012-05-27 12:47
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
编程的时候不要用这容易出现奇异的语句,不同的编译器结果可能不一样。

去追究这个的结果无异于和孔乙己问hui有几种写法一样。

毫无意义
2012-05-27 15:15
a7882669
Rank: 4
等 级:业余侠客
帖 子:192
专家分:290
注 册:2012-4-17
收藏
得分:0 
回复 5楼 shyliuwei
这个涉及到一个优先级的问题, 先计算前两个,  所以i=10,  然后再和第三个相加,此时i=11, 所以就是  20+11=31.
2012-05-27 16:09
a7882669
Rank: 4
等 级:业余侠客
帖 子:192
专家分:290
注 册:2012-4-17
收藏
得分:0 
回复 楼主 shyliuwei
这个  也不是 太清楚,记着就行,     解释一下:    定义了i=8,  给i开辟了一个存储空间,  为8,然后  两个括号,  都是++再前,  所以  此时i变成了10.所以 y=20,     第二个程序,  因为++再后,所以y=16,但是i还是为10.
2012-05-27 16:17
阴阳
Rank: 4
等 级:业余侠客
帖 子:102
专家分:297
注 册:2012-4-7
收藏
得分:0 
这个问题已经讨论了好多了,找找以前的帖子看看就行了!没必要发帖吧!

一阴一阳之谓道!
2012-05-27 16:27
快速回复:这个C故障了?求解
数据加载中...
 
   



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

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