| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 733 人关注过本帖
标题:自加自减的运算问题,怎么是这个答案!!
只看楼主 加入收藏
ygwlovech
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2011-12-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
自加自减的运算问题,怎么是这个答案!!
程序代码:
#include <stdio.h>
int main()
{int i=3,j=3,a,b;
a=(i++)+(i++)+(i++);//是不是i先运算再自加一,算出来是i=6(这个知道),a=9(这个是怎么来的)
b=(++j)+(++j)+(++j);//(这个就不懂了)j=6,为什么b=16而不是12或15
    printf("%d,%d\n%d,%d",i,a,j,b);
    sleep(10000);
    return 0;
}



搜索更多相关主题的帖子: 答案 
2012-03-01 15:50
ygwlovech
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2011-12-24
收藏
得分:0 
前辈们帮忙啊。在线等待
2012-03-01 16:06
难的哟
Rank: 2
等 级:论坛游民
帖 子:26
专家分:34
注 册:2012-1-25
收藏
得分:0 
书上是说a=(i++)+(i++)+(i++)是把i的原值取出来作为表达式中i的值即三个三相加得到9,然后再进行自加得i=6;而b=(++j)+(++j)+(++j)是先扫描表达式先对j自加三次得到六再进行三个六相加得18至于为什么会得到16我就不知道了。。。
2012-03-01 16:33
ygwlovech
Rank: 2
等 级:论坛游民
帖 子:16
专家分:10
注 册:2011-12-24
收藏
得分:0 
我也觉得不对,要么是15,要么是12,要么是18,为什么是16,。
2012-03-01 16:38
天仲子
Rank: 2
等 级:论坛游民
帖 子:49
专家分:49
注 册:2012-1-3
收藏
得分:0 
等于16是不是编译器的问题呢,我原来也有过这个问题
2012-03-01 17:58
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
收藏
得分:0 
这个题是这样的,程序是由上往下运行的,如果是循环,只有执行完了一遍才会改变值,
而a=(i++) + (i++) + (i++)里,因为a=(i++) + (i++) + (i++)是同一个式子,所以从开始执行到最后i的值都不变,有因为i++是先执行后面语句才加一所以i=3,既a=3+3+3;也就是说i++没有起到应有的作用。然后再进行自加得i=6
举个例子:
while(1)
{int i=1;
int a ;
a=i+1;i++;//先执行i=i+1然后才是i++,这样i的值就有变化了
//a=(i++) + 1;这一句i++的作用就没起到。
}



[ 本帖最后由 姚杰 于 2012-3-1 19:24 编辑 ]

持之以恒,别留遗憾,加油
2012-03-01 19:21
zhangxiangD
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:119
注 册:2011-12-20
收藏
得分:5 
a确实等于9,不好理解。但不用担心,c中不建议这样使用自加或自减。写程序首先要简洁、明了、易懂,再谈效率。
2012-03-01 19:24
fanliguang
Rank: 2
等 级:论坛游民
帖 子:31
专家分:52
注 册:2012-2-26
收藏
得分:10 
我理解的 b=(++j)+(++j)+(++j)是这样的:先算第一个++j,值是4,然后将它保存在内存叫j(姑且这样假设)的位置处。然后再算第二个++j,值是5,由于此时变量仍然叫j,所以仍将它保存在内存叫j的位置处,将原来的4覆盖了。这样(++j)+(++j)就成了5+5了。由于此时的j=5,所以到第三个++j时,j的值就成了6了。这时,就是5+5+6=16了。

对不对?请指点。
2012-03-01 20:27
C小学生
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-3-1
收藏
得分:0 
对于i和a的值大家都能理解,对于j和b的值,我是这样理解的,不知对不对.在做第一个+号前的两个自加时,由于括号的优先级大于括号,所以先做自加,这样前面两个自加的和是10,j的值是5,等到做第二个加号时,由于先做j的自加,所以此时j为6,然后做10+6, b就等于16.同样可以推断,如b=(++j)+(++j)+(++j)+(++)的值应为23.程序实际运行值也验证了这一点.请大家指点哦.
2012-03-01 21:08
emperor智
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-2-28
收藏
得分:0 
应该和那编译器也有关系吧
2012-03-01 22:38
快速回复:自加自减的运算问题,怎么是这个答案!!
数据加载中...
 
   



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

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