鱼C论坛

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

解释一下这个c++问题

[复制链接]
发表于 2013-11-27 22:35:44 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 maomingkun 于 2013-11-27 22:47 编辑

源码如下:
#include <stdio.h>

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);
}


运算结果q的值为什么是22,而不是21呢?++j是先自增再参与运算,那q不是应该等于6+7+8=21么?为什么会是22呢?小弟很是费解啊,到底问题出在哪里了?

最佳答案

查看完整内容

我项很多人都知道i++和++i的区别,但是在复杂的式子中却没能得到我们预料的结果,其实这都是编译器的问题。。不同的编译器在处理这些式子时会有一些不同。。。因此,不要纠结于这些问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-27 22:35:45 | 显示全部楼层
我项很多人都知道i++和++i的区别,但是在复杂的式子中却没能得到我们预料的结果,其实这都是编译器的问题。。不同的编译器在处理这些式子时会有一些不同。。。因此,不要纠结于这些问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-28 14:32:27 | 显示全部楼层

那岂不是跟bug一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-28 14:39:48 | 显示全部楼层
maomingkun 发表于 2013-11-28 14:32
那岂不是跟bug一样?

所以实际使用上很少会用这种复杂的多重自增自减。。避免这种情况的发生
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-28 14:42:38 | 显示全部楼层
哎  被甲鱼哥给坑了:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-28 20:48:54 | 显示全部楼层
有的编译器会“优化”你的代码,然后自加完后再往下走,然后莫名其妙的多了1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-29 01:25:29 | 显示全部楼层
看汇编代码吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-29 16:06:17 | 显示全部楼层
卧室不要床 发表于 2013-11-29 01:25
看汇编代码吧

还没学会汇编呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 21:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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