鱼C论坛

 找回密码
 立即注册
查看: 2856|回复: 13

关于自增自减运算符。有几个问题

[复制链接]
发表于 2013-11-21 20:25:35 | 显示全部楼层 |阅读模式

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

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

x
本来想偷个懒的。。看来不行了。,这里应该是比较难的一部分

QQ截图20131121202052.png

程序代码
#include <stdio.h>
int main(void)
{
        int i=5,j=5,p,q;
        p=(i++)+(i++)+(i++);
        printf("%d",p);
}

问题所在:
程序的结果是15
但我觉得。应该是
5(在使用之后加一,这里不加)
6(前面加了1 )
7(再加1)
所以我认为结果应该是18
但编译器告诉我结果是15 百度说是5+5+5=15
我表示不理解。。请大家帮忙解答一下

提个建议:每个例题不一定要打出来。但有必要的一定要讲解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-21 21:11:21 | 显示全部楼层
p=(i++)+(i++)+(i++);
上面的语句等价于p=i + i + i;               之后i++;执行三次,你打印i的值是8
希望能帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-21 21:54:51 | 显示全部楼层
不同的编译器会有不同的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-21 22:10:45 | 显示全部楼层

可否理解为,。++运算符如果没有进行复赋值,则值不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 04:12:42 | 显示全部楼层
admintow 发表于 2013-11-21 22:10
可否理解为,。++运算符如果没有进行复赋值,则值不变

这么说吧后++运算优先级是比较低的  用括号括起来也是一样  所以i并没有进行任何自增的操作  所以p = 3i  在对p赋值之后  i才会做++操作  而且是做3次
p = (i++)+(i++)+(i++);  这条语句就相当于下面4条语句
p = i + i + i;
i++;
i++;
i++;
最后      保持这种求知欲是不断进步的动力  加油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 13:06:39 | 显示全部楼层
有点意思啊!~{:1_1:}   学习中突破?!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 13:55:28 | 显示全部楼层
ascxyh009 发表于 2013-11-22 04:12
这么说吧后++运算优先级是比较低的  用括号括起来也是一样  所以i并没有进行任何自增的操作  所以p = 3i  ...

原来是这样,我也是刚知道,谢谢啦!!!

—————————————
【人要活的有规律,有效率丶】
—————————————
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 15:06:01 | 显示全部楼层
运算符优先级。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 16:30:29 | 显示全部楼层
前自增跟后自增的问题
相同:
  结果都是i自增1
不同:
  前自增整体表达式的值是i+1后的值
  K=++i;      //K=4  I=4
  后自增整体表达式的值是i+i之前的值
  J=i++;      //J=3   J=4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 16:45:58 | 显示全部楼层
这个问题我理解拉!~    按照运算符的顺序!~:shy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 16:50:27 | 显示全部楼层
ascxyh009 发表于 2013-11-22 04:12
这么说吧后++运算优先级是比较低的  用括号括起来也是一样  所以i并没有进行任何自增的操作  所以p = 3i  ...

也就是说。这里是先把所有的I++都算出来,再相加
根据“后自增整体表达式的值是i+i之前的值”
所以是5+5+5?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 16:52:32 | 显示全部楼层
云客联盟 发表于 2013-11-21 21:54
不同的编译器会有不同的结果。

正解,,不同编译器处理的方式会不同,,我们编程的时候往往要避免这种情况,以增强程序的可移植性!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 19:48:50 | 显示全部楼层
平平常常丶 发表于 2013-11-22 13:55
原来是这样,我也是刚知道,谢谢啦!!!

—————————————

与君共勉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 19:52:58 | 显示全部楼层
admintow 发表于 2013-11-22 16:50
也就是说。这里是先把所有的I++都算出来,再相加
根据“后自增整体表达式的值是i+i之前的值”
所以是5+ ...

没有先算i++   先算p  在计算p的时候i没有自增   一直都是5, 所以p才是15  算完p之后  i自增三次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-22 16:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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