鱼C论坛

 找回密码
 立即注册
查看: 1352|回复: 12

这个怎么错了??

[复制链接]
发表于 2015-1-21 23:56:30 | 显示全部楼层 |阅读模式

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

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

x
如图
QQ图片20150121235709.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-23 09:52:28 | 显示全部楼层
本帖最后由 haiouda 于 2015-1-23 09:55 编辑

出于好奇,把上面的又重打了一遍;这会结要又不一样了,我的电脑它到底是怎么算的呢?
QQ图片20150123095319.png
QQ图片201509.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-22 00:12:35 | 显示全部楼层
你是要写 q = (++j) + (++j) + (++j) 吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 00:37:25 | 显示全部楼层
小甲鱼 发表于 2015-1-22 00:12
你是要写 q = (++j) + (++j) + (++j) 吧?

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

使用道具 举报

 楼主| 发表于 2015-1-22 00:38:06 | 显示全部楼层
小甲鱼 发表于 2015-1-22 00:12
你是要写 q = (++j) + (++j) + (++j) 吧?

不好意思 ,打错了一个符号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 00:47:18 | 显示全部楼层
上面,p=5+6+7=18呀,为啥 是15?
上面,q=6+7+8=21呀,为啥结果是22 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-22 10:39:04 | 显示全部楼层
其实这也跟编译器的优化有一定的关系:
#include <stdio.h>

int main()
{
    int i = 5, j = 5, p, q;
    p = (i++) + (i++) + (i++);  // 这个很容易,是先使用 i 的值,在本语句结束后再进行 ++ 操作
    q = (++j) + (++j) + (++j); 
/* 
    这个又是怎么回事呢?
    是这样的,相当于:
    q = (++j) + ((++j) + (++j))
    q = (++j) + (7 + 7)
    q = 8 + 14
    q = 22
*/
    printf("%d, %d", p, q);

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 11:16:32 | 显示全部楼层
小甲鱼 发表于 2015-1-22 10:39
其实这也跟编译器的优化有一定的关系:

为啥 我就是看不明白呀

j 的值是5,第一个(++j)怎么成8了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 11:22:38 | 显示全部楼层
haiouda 发表于 2015-1-22 00:47
上面,p=5+6+7=18呀,为啥 是15?
上面,q=6+7+8=21呀,为啥结果是22 ?

如果排除,软件问题:
按正常的逻辑,我上面写的结果,是对的。 是这样子的么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-22 12:29:38 | 显示全部楼层
haiouda 发表于 2015-1-22 11:16
为啥 我就是看不明白呀

j 的值是5,第一个(++j)怎么成8了

因为 ++j 是先进行 ++ 操作,再使用 j 的值
    q = (++j) + ((++j) + (++j))
    q = (++j) + (7 + 7)  # 此时后边两个 j 的值是 7,前边那个 j 还没参与运算,所以先不管
    q = 8 + 14 # 现在参与了,所以在原来 7 的基础上再进行 ++ 操作,得到 8
    q = 22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 15:41:42 | 显示全部楼层
小甲鱼 发表于 2015-1-22 12:29
因为 ++j 是先进行 ++ 操作,再使用 j 的值

小甲鱼老师,辛苦了,终于搞懂了,谢谢了:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-23 09:56:20 | 显示全部楼层
小甲鱼 发表于 2015-1-22 12:29
因为 ++j 是先进行 ++ 操作,再使用 j 的值

加了个括号后,结果又不一样了哟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-23 16:36:20 | 显示全部楼层
p就是5+5+5啊~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-24 08:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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