| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 419 人关注过本帖
标题:关于递增、递减运算符
收藏  订阅  推荐  打印 
paiwj
Rank: 1
等级:新手上路
帖子:8
积分:180
注册:2004-5-14
关于递增、递减运算符

请问这两个问题为什么有不同的结果:

main()

{int j=2;

printf("j=%d,(j++)+(j++)+(j++)=%d\n",j,(j++)+(j++)+(j++));

j=2;

printf("j=%d,(++j)+(++j)+(++j)=%d\n",j,(++j)+(++j)+(++j));

}

运行结果:j=5,(j++)+(j++)+(j++)=9

j=5,(++j)+(++j)+(++j)=12

而如果改成:

main()

{int j=2,y1,y2;

y1=(j++)+(j++)+(j++);

printf("j=%d,(j++)+(j++)+(j++)=%d\n",j,y1);

j=2;

y2=(++j)+(++j)+(++j);

printf("j=%d,(++j)+(++j)+(++j)=%d\n",j,y2);

}

运行结果:j=5,y1=6

j=5,y2=15

搜索更多相关主题的帖子: 运算符  递减  递增  
2004-9-15 14:42
神vLinux飘飘
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:87
帖子:6085
积分:61226
注册:2004-7-17

对于这种问题是不是可以认为是C语言对待[一般表达式]和[函数参数表达式]的时候有一点点不同呢?

我不知道,请大家赐教。

不过,我想,这种问题应该是研究C语言特性的时候才用吧?一般人怎么可能会用上(++j)+(++j)+(++j)这么BT的东西啊!


泛出微微的蓝色的光,像有生命般涌动着,闪烁着,平滑而优美,达到了机械和美学结合的最高境界,向一件艺术品一样,默默的展示着,寂寞而孤傲,只有宇宙才能证实它的存在,只有永恒可以于它并存
2004-9-15 16:26
Jorbo
Rank: 2
等级:注册会员
帖子:68
积分:780
注册:2004-9-8

第一道输出结果是:

2,6

5,13

第二道输出结果是:

5,6

5,13

我想了半天也想不通!!!


2004-9-15 16:28
young
Rank: 2
等级:注册会员
帖子:174
积分:1938
注册:2004-9-5

这道题目在TC和VC++中会得到不同的结果,这是很正常的。因为它们俩不是同一家公司开发的,TC是Borland开发的,而VC++是Microsoft公司开发的。 我想说一下在VC++中这个结果如何得来的,TC中的我不知道,因为我不用TC有好多年。 int j=2; y2=(++j)+(++j)+(++j); 它是这样执行的,可以分为两个语句: y2 = (++j)+(++j); // 先做j 两次++, 得j = 4, y2 = 4 + 4 = 8; y2 += (++j); // 做j 自加一次,的 j = 5, y2 = 8 + 5 = 13; 即做加法时(假如个数大于2),那么先做前面两个,得到的和再和第三个相加,这样继续下去,直到最后一个数。 即如果表达式是这样的话:y2=(++j)+(++j)+(++j)+(++j); 此时y2 = 4 + 4 + 5 + 6 = 19; 如果还是不明白的话,大家可以看看C++语言中的运算符重载,看看它是怎么处理连加的。 上面是对于整形的情况,下面来说说浮点型是怎么处理的。 float j = 2.0; y2=(++j)+(++j)+(++j); 是这样执行的; y2 = (++j); // j = 3.00000, y2 = 3.0000 y2+= (++j); // j = 4.0000, y2 = 7.0000 y2+= (++j); // j = 5.0000, y2 = 12.0000 也就是说它是一个个加进去的。 大家看的很迷惑吧,但它确实这样的,所以大家尽量不要在表达式里面使用 ++,--的 如有说的不对之处,请指出。


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-9-16 19:08
Knocker
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:36
帖子:9963
积分:324662
注册:2004-6-1

这种问题我想不必讨论,本身在一个表达式对同一变量连续自增自减是不许可的.

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-9-16 20:11
乌鸦丘比特
Rank: 4
等级:高级会员
威望:2
帖子:625
积分:6500
注册:2004-7-19

这种我也觉得没必要讨论,这么用容易出错,而且完全可以用其他方法代替。

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-9-17 12:15
noah183
Rank: 1
等级:新手上路
帖子:9
积分:190
注册:2004-9-18

请问这两个问题为什么有不同的结果:

main()

{int j=2;

printf("j=%d,(j++)+(j++)+(j++)=%d\n",j,(j++)+(j++)+(j++));

j=2;

printf("j=%d,(++j)+(++j)+(++j)=%d\n",j,(++j)+(++j)+(++j));

}

运行结果:j=5,(j++)+(j++)+(j++)=9

j=5,(++j)+(++j)+(++j)=12

这个程序因为j++是先表示j的值,然后j本身再加1;

而++j是先加1再表达他的值;

所有第一个是2+3+4;

第二个是3+4+5

不过像这种用了这么多次的++的很容易出错

尽量避免用这样表示

2004-9-18 11:58
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.073832 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved