鱼C论坛

 找回密码
 立即注册
查看: 3803|回复: 7

关于输出函数的多种情况讨论

[复制链接]
发表于 2011-7-22 13:01:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请分析一下各种情况输出的结果及其原因:
   printf("%d\n",a+++a+++a+++);
    printf("%d\n",(a++)+(a++)+(a++));
     printf("%d\n",++a+++a+++a);
  printf("%d\n",(++a)+(++a)+(++a));

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-7-22 13:10:42 | 显示全部楼层
补充一下,int a = 8;
  
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-7-22 13:15:57 | 显示全部楼层
再补充一下,第一行应该为
printf("%d\n",a+++a+++a++);
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-22 13:38:34 | 显示全部楼层
编译器不同答案不同。。。。.没有必要纠结。。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-22 14:15:22 | 显示全部楼层
真搞不懂,干嘛给自己找麻烦,良好的代码风格不是更好
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-22 15:54:06 | 显示全部楼层
你上面的代码在不同的系统上结果不同。
我分别在LCC和WIN-TC上试了一下,结果相同,但与谭浩强老师C语言第二版教材第25页中的介绍不一致。
谭浩强老师教材中明确对(a++)+(a++)+(a++)和(++a)+(++a)+(++a)这两种情况进行了分别叙述,第一种情况,是先把的原值取出来,作为表达式的值进行三次相加得24,然后,再实现的自增为11。第二种情况,是先自增为11,然后再进行三次相加,得33。
而我用LCC和WIN-TC计算出来的结果,与谭老师教材中分析的截然不同,第一种情况,相当于8+9+10=27,而第二种情况,相当于9+10+11=30。这种情况的出现可能是使用的系统不同的原因。并且你的代码第三条语句在编译是出现错误提示:the left hand side of the assignment can't be assigned to,可能是这样的写法不正确。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-22 17:14:38 | 显示全部楼层
本帖最后由 chao_prince 于 2011-7-22 17:15 编辑

C语言对运算符有个规则。。就是贪心法。。包含尽量多的运算符。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-26 23:39:19 | 显示全部楼层
同上  C语言陷阱里有提到
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-28 04:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表