| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 799 人关注过本帖
标题:来个高手帮我讲下为什么(b=6)而不是4?
只看楼主 加入收藏
iqyuankong
Rank: 2
等 级:论坛游民
帖 子:68
专家分:10
注 册:2009-10-23
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:9 
来个高手帮我讲下为什么(b=6)而不是4?
#include<stdio.h>
void main()
{
    int a,b;
    a=1;
    b=(++a)+(++a);
    printf("a=%d\n",a);
    printf("b=%d\n",b);
}
2009-11-19 20:57
已屏蔽
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:124
注 册:2009-9-5
收藏
得分:0 
    ...
    b=(++a)+(++a);
    ...
相当于
    ...
    ++a;
    ++a;
    b=a+a;
    ...
。。。

是按语句分的。。。
2009-11-19 21:03
Bosen
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:65
专家分:102
注 册:2009-11-3
收藏
得分:20 
关于这个问题,请楼主务必知道++i与i++的区别和意识!
首先我们看看  b=(++a)+(++a);
先做++a由此得到a=2然后再做下一个++a;因为a已经是2了,所以第二个a=2;经过++a后;a=4;
由此得:b=2+4=6;
2009-11-19 21:04
Bosen
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:65
专家分:102
注 册:2009-11-3
收藏
得分:0 
关于这个问题,请楼主务必知道++i与i++的区别和意识!
首先我们看看  b=(++a)+(++a);
先做++a由此得到a=2然后再做下一个++a;因为a已经是2了,所以第二个a=3;
由此得:b=3+3=6;
2009-11-19 21:10
caojulians
Rank: 2
等 级:论坛游民
帖 子:39
专家分:67
注 册:2009-11-15
收藏
得分:0 
这是C语言中称作“未定义”问题:在一个表达式中出现了两个或更多的带有“副作用”的子表达式(副作用指一个表达式除了取用表达式的值--主要作用--外又修改了某个变量的值--副作用-),ANSI C中未对其给出严格定义,由C语言编译系统自行处理--自己想怎样优化就怎样做。后果是上述程序在语法上不算错,但在不同环境下结果不一样。所以编程中要严格禁止这一类的代码出现----编程规范!一些教材上介绍、使用这类题目就是在误导!
引起“副作用”的表达式有三种:++和--、=和+=类、带返回参数的函数或宏,在一个表达式中出现对一个变量二次的副作用--结果是不必讨论的--无意义!
上述几位尝试解释它,一是无意义,二是有错误(没有想到6是由1+2+3得到的,编译后的程序又加了一个1).
试一试 a++ + a++ + a++;结果是10不是9!(VC和DEV C++都是一样)
2009-11-24 16:09
caojulians
Rank: 2
等 级:论坛游民
帖 子:39
专家分:67
注 册:2009-11-15
收藏
得分:0 
这个问题在《C和指针》、《C缺陷和陷阱》中都有讨论
2009-11-24 16:10
feetlink
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2009-3-7
收藏
得分:0 
回复 5楼 caojulians
首先我觉得caojulians你是想说 ++a + ++a + ++a的结果等于10而不是等于9,(1+2+3+4)对吧? 但我是出来的结果不是9也不是10,而是12.(4+4+4)

然后对你的关于编译之后再加1的说法产生了不解。
2009-11-24 17:04
hqdvista
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2009-11-24
收藏
得分:0 
学习了~
2009-11-24 17:10
菜豆王子
Rank: 2
等 级:论坛游民
帖 子:44
专家分:96
注 册:2009-11-22
收藏
得分:0 
这有意义吗?
2009-11-24 19:31
blueskystadi
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2009-11-24
收藏
得分:0 
考试中经常会有这类题。
2009-11-24 21:33
快速回复:来个高手帮我讲下为什么(b=6)而不是4?
数据加载中...
 
   



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

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