鱼C论坛

 找回密码
 立即注册
查看: 2158|回复: 9

i++

[复制链接]
发表于 2014-9-30 10:40:29 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 haiouda 于 2014-9-30 10:41 编辑

;#include <stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);

printf("%d,%d,%d,%d\n",p,q,i,j);
        

}

结果为什么是:15 22 8 8 ?
p=(i++)+(i++)+(i++); i的值为什么一直是5不自增?
q=(++j)+(++j)+(++j); j 的值为什么第一次自增后是6(理解),第二个括号中就变成8了?第三个括号中的值还是8??为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-30 11:15:08 | 显示全部楼层

为什么,和分步执行的,结果不一样呢???
ttt.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-30 11:44:41 | 显示全部楼层
因为按照C语言标准(90或者99)这个程序的输出就是可以有多种答案的,不同的C语言编译器可以有不同的答案。
这题主要目的是要告诉你,你自己千万不要写出类似的程序。
如果考试的时候遇到这种题目,你一定要警醒。。。自己以后当老师教C语言不要再干这种丢脸的事情,会被很多学生嘲笑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-30 11:47:37 | 显示全部楼层
仰望天上的光 发表于 2014-9-30 11:44
因为按照C语言标准(90或者99)这个程序的输出就是可以有多种答案的,不同的C语言编译器可以有不同的答案。 ...

原来被小甲鱼给涮了:sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-30 17:11:02 | 显示全部楼层
1,i++是运算以后在自加,p=(i++)+(i++)+(i++),括号里面没有进行运算,所以不会自加,而且+的优先级比++高,所以,p = 5+ 5+5计算完以后,i才进行自加三次。
2,如果分布运算的话,你就把这个程序分解为p =i++;运行三遍,所以分别为5,11,18
3,对于q=(++j)+(++j)+(++j); 不同的编译器运行结果是不同的,对于GCC环境下,相当于q=((++j)+(++j))+(++j);先进行两次累加,一次相加以后,在进行一次累加和一次相加。所以运行结果为22

这个问题需要有一点汇编的思维来理解机器执行的顺序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-9-30 18:56:00 | 显示全部楼层
Answer.zhang 发表于 2014-9-30 17:11
1,i++是运算以后在自加,p=(i++)+(i++)+(i++),括号里面没有进行运算,所以不会自加,而且+的优先级比++高 ...

解释得不对。如果真的需要解释应该从“表达式的值”和“表达式的副作用”这两个方面来说明前置,后置++,和运算符优先级没有太大的关系。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-4 00:56:21 | 显示全部楼层
只要指的
i++
和++i的区别就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-4 08:27:17 | 显示全部楼层
anyonghui 发表于 2014-10-4 00:56
只要指的
i++
和++i的区别就可以了

小甲鱼不是在汇编中说了是编译器先进行了优化才执行的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-11-1 05:16:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-10 20:58:02 | 显示全部楼层
Answer.zhang 发表于 2014-9-30 17:11
1,i++是运算以后在自加,p=(i++)+(i++)+(i++),括号里面没有进行运算,所以不会自加,而且+的优先级比++高 ...

您讲的很好~第一个式子大概听懂了就是++没进行运算 只是运行了括号 和+
i++这个符号有括号的时候就等于i 因为不能把值赋给y 所以运行不了++是这样吧?
但是的二个式子 基本没看懂 请问什么是GCC环境啊?还有他为什么是 运行两次+1 第三次重复啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 07:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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