| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1433 人关注过本帖
标题:求助:关于C语言中自增的一个问题
只看楼主 加入收藏
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

未定义行为,讨论没有意义!


2007-10-24 20:59
liux945
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-9-30
收藏
得分:0 
恩在VC肯定是19了 TC不知道了
int a=4,b;
b=(++a)+(++a)+(++a);

先加后用 b=5+6+7 就是这个样子 a的值是递增的 最后就变成7了

至于TC是21 我不知道TC对++a是怎么计算的

吃得苦中苦 方为人上人
2007-10-24 21:49
o0花生0o
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2007-10-13
收藏
得分:0 
vc是19,个人觉得11楼的说的对,但具体原因,不清楚
2007-10-24 23:30
liux945
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-9-30
收藏
得分:0 
今天特地算了一下 终于知道VC为什么是19了
#include <stdio.h>
main()
{
int a=4,b
b=(++a)+(++a)+(++a);
printf("%d",b);
}
VC逻辑是这样的 第三个a的值为7 相信用VC的都没有异议了 关键就是前面的a的值 VC是先计算前面的式子(++a)+(++a) 第2个a为6 它把第1个a和第2个a统一了 都为6 算出得12
然后12再+第3个a的值7 得出的结果就是19 别问我为什么VC是这个逻辑 我也不知道... 反正我是先算(++a)+(++a);a的值从1到10 然后把b的值都统计出来了 找到了(++a)+(++a);
结果的规律 然后再算的(++a)+(++a)+(++a);也是a的值从1到10 然后统计b的值 费了我好大劲 总算找出VC的逻辑了

呵呵 如果不信的话大家也可以用数实验的 看是不是我说的这个逻辑

吃得苦中苦 方为人上人
2007-10-25 16:21
封闭
Rank: 9Rank: 9Rank: 9
来 自:广东省汕头市
等 级:蜘蛛侠
威 望:1
帖 子:501
专家分:1084
注 册:2007-9-14
收藏
得分:0 
刚看了一下.
我用TC编译出来也是21..
但是就是不知道为什么是21...
答案应该是18呀..
2007-10-25 20:49
gahddd
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
收藏
得分:0 
21应该很好理解呀,++优先级高于+ ,所以先算三个++a ,加完后a的值变成7 ,三个7相加得21。

俺从乡下来,俺啥也不懂。
2007-10-25 21:49
psp0375
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-10-22
收藏
得分:0 
以下是引用gahddd在2007-10-23 21:30:07的发言:
#include "stdio.h"
main()
{
int a=4,b;
b=(++a)+(++a)+(++a);
printf("%d\n",b);
}
这段程序在VC中得到结果为19,在TC中结果为21,在TC中的结果我能算出来,但在VC中得到19就不懂了。

忘哪位高手 知道的给个答案,谢谢。

19估计不可能,这个语句: b=(++a)+(++a)+(++a);
有两种解释:(1) "a"在实现自加之后,进行加法运算;(++优先于+)结果是21
(2)"a"在括号内自加同时参与后面运算;结果是18

[此贴子已经被作者于2007-10-26 9:29:57编辑过]


虚心请教,认真学习..
2007-10-26 09:28
psp0375
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-10-22
收藏
得分:0 
这个就要看编译器中的变量存储原理,对变量地址的定义. 学编译的应该清楚

虚心请教,认真学习..
2007-10-26 09:38
jianping814
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-12
收藏
得分:0 
正在思考中......

2007-10-26 15:21
gahddd
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-9-19
收藏
得分:0 
以下是引用psp0375在2007-10-26 9:28:07的发言:

19估计不可能,这个语句: b=(++a)+(++a)+(++a);
有两种解释:(1) "a"在实现自加之后,进行加法运算;(++优先于+)结果是21
(2)"a"在括号内自加同时参与后面运算;结果是18


嗯,我当时也是这么想的,21和18我都能理解,但是在VC上运行的结果就是19,所以才弄不懂了。


俺从乡下来,俺啥也不懂。
2007-10-26 19:57
快速回复:求助:关于C语言中自增的一个问题
数据加载中...
 
   



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

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