| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 639 人关注过本帖
标题:[讨论]一个非常有趣的c的自加自减问题
只看楼主 加入收藏
phboenix
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-6-6
收藏
 问题点数:0 回复次数:4 
[讨论]一个非常有趣的c的自加自减问题
现在有下面一个c语言程序,我百试不得其解,为什么把++a*--a赋值给b之后的值为25,但是++a*--a直接放在printf中的值就是30。请哪为大虾能为我解释一下,十分感谢!
main()
{
  int a=5,b;
  b=++a*--a; /*       表达式++a*--a赋给b后的值为什么会是25呢?  */
  printf("%d\n",b);
  printf("%d\n",++a*--a);/*  表达式++a*--a直接打印出来,其值为什么又会是30呢?*/
}                      /* 无论是哪种情况,这两个表达式的值应该是完全一样的呀*/
                       /*但为什么会不一样呢*/   

[此贴子已经被作者于2005-6-8 14:52:05编辑过]


搜索更多相关主题的帖子: c语言程序 表达式 
2005-06-06 14:35
uuzhang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-6-6
收藏
得分:0 
那一句的

运算符优先级最高的就是前缀++,-- 了 他们高到了所有运算都不进行 直接进行++ -- 了 同时做当然是相互抵消了  这个有些编译器结果好象也不一样

----------------- --碎心竹 水煮C语言群:16345236
2005-06-06 23:59
phboenix
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-6-6
收藏
得分:0 
非常感谢,但是在printf("%d\n",++a*--a);中的结果却是30。这没有道理呀!两个表达式的结果应该是一样的才对呀!

2005-06-07 22:33
phboenix
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-6-6
收藏
得分:0 
怎么,难道没有人给我一个正确的解释吗?

2005-06-09 01:02
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
收藏
得分:0 
tc下确实如楼主结果,vc和gcc下两个都是25。
应该是这个运算的处理顺序未定义,所以不同编译器处理方式可以不同。
而tc中同样的2个表达式,居然还会不同结果...
虽然不能说编译器不好,但还是避免踩到这种地雷的好.

Have you visit acm.tongji. lately?
2005-06-09 08:10
快速回复:[讨论]一个非常有趣的c的自加自减问题
数据加载中...
 
   



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

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