鱼C论坛

 找回密码
 立即注册
查看: 8170|回复: 21

为什么输出的结果为22,怎么不是21,或者怎么不是24呢,我用的是vc6++编译器

[复制链接]
发表于 2012-5-7 13:33:44 | 显示全部楼层 |阅读模式
1鱼币
#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的输出结果我可以理解,但是q不是等于8+8+8=24么,或者怎么不等于6+7+8=21呢,为什么等于22呢,j的结果是等于8,可为什么i的结果也是8,不是5么?求各位帮忙帮忙了

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-7 13:45:29 | 显示全部楼层
本帖最后由 寂静的风之力 于 2012-5-7 13:46 编辑

研究这种东西没有任何意义,也不能帮你解决实际问题,不要被这种东西束缚住,真正编程的时候你会去用p=(++i)+(i++)+(++i);这种写法吗?因为你我以及大多数程序员根本就搞不清楚正确结果是什么。

能写出这种不确定结果的程序员一定不是一个优秀的程序员,除了一些无聊人和书,这种东西不会出现在一个真正的程序中。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 14:25:26 | 显示全部楼层
楼上说的对
你只要知道i++和++i的区别和用法就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 14:26:04 | 显示全部楼层
完全没有必要去纠结这东西
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 15:43:57 | 显示全部楼层
你把它的可执行文件  反汇编就知道  原因了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 16:10:41 | 显示全部楼层
http://bbs.fishc.com/thread-15954-1-1.html
看这个,我整理的资料
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 16:28:52 | 显示全部楼层
这个22的原因我也不知道,不过估计应该是编译器的原因,你换个编译器也许就是21了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 16:39:15 | 显示全部楼层
去看6楼整理的总结,感觉不错!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 16:59:54 | 显示全部楼层
看下反汇编代码...不同的编译器结果可能不同的...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-7 20:27:49 | 显示全部楼层
不要纠结于没有意义的问题了好不好~~~


知道++i --i i++ i--就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-8 10:02:39 | 显示全部楼层
i++是先运算在加  所以p=5+5+5;因为是平行关系;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-10 06:10:54 | 显示全部楼层
i++ i++ i++ 这里是后加,也就是说是三个五相加,那就是15了,

而++j, ++j, ++j ,是先加,因为j开始是5, 当运行完第一个++j后,j变成了6,当运行完第二个++j后,j就变成7了,
而当运行完最后一个++j,j就是8了,所以这里是6 + 7 + 8 = 22

明白了吧?!, 我是初学的,这是我认为这样理解的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-10 08:09:56 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-10 08:36:12 | 显示全部楼层
建议先不要研究这种没意义的问题,,如果你真的想知道,推荐你去看《C Primer Plus》第五章
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-10 15:36:43 | 显示全部楼层
redhat0921 发表于 2012-5-10 08:09
你确定6+7+8=22?

不是6+7+8,在VC++6.0上面默认的是7+7+8
详情请见
http://bbs.fishc.com/thread-15954-1-1.html 这里说的很清楚!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-10 16:26:26 | 显示全部楼层
湮汐 发表于 2012-5-10 15:36
不是6+7+8,在VC++6.0上面默认的是7+7+8
详情请见
http://bbs.fishc.com/thread-15954-1-1.html 这里说 ...

OK,看了汇编代码就懂了,以前虽然知道有这种问题,但一直没去看汇编代码,一直拖着,看了后,原来是把 j 自增两次后,和本身想加,那就是7+7了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-10 18:38:36 | 显示全部楼层
寂静的风之力 发表于 2012-5-7 13:45
研究这种东西没有任何意义,也不能帮你解决实际问题,不要被这种东西束缚住,真正编程的时候你会去用p=(++i ...

嗯...书本说这些都是数值运算算法例子...
写程序我们还是要写非数值运算算法的...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-10 18:43:10 | 显示全部楼层
p=(i++)+(i++)+(i++),中根据c++的规则,是要先进行i+i+i,在这之后紧接着进行,i=i+1,重复三次,而i+3=8,至于后面为什么q=22还不清楚,我以为是21
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-14 22:17:41 | 显示全部楼层
跟编译器有关
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-5-16 19:32:46 | 显示全部楼层
是编译器的问题,你看一下反汇编就知道了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 02:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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