鱼C论坛

 找回密码
 立即注册
查看: 4842|回复: 5

关于自加的问题

[复制链接]
发表于 2013-9-19 13:15:01 | 显示全部楼层 |阅读模式

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

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

x
void main()
{
        int i=5,j=5,p,q;
        p=(i++)+(i++)+(i++);
        q=(++j)+(++j)+(++j);
        printf("%d,%d,%d,%d",p,q,i,j);
}
为什么最后q输出是22啊?我算的是21,为什么呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-19 13:49:14 | 显示全部楼层
又是这个问题 O__O"…
首先你不用纠结这个事情很有可能你换个编译器换台电脑结果都是不同的
最好的办法自己反汇编去看汇编代码
或者你去论坛搜索下一大堆
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-19 15:37:32 | 显示全部楼层

好吧,刚接触c,就一堆问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-20 12:11:02 | 显示全部楼层
这个问题在不同的编译环境,得出的结果是不同的。
在VC++下:
            ①  p= (i++) + (i++) + (i++);  
            ②  q= (++j) + (++j) + (++j);  

首先得明白 i++ 是先引用再自增,++j 是先自增再引用,其实他们最终都是自加1。

①vc++是这样处理的 p = 5 + 5 + 5 = 15   ,最后 i++ 再挨个自增 ,所以 i = 8
② ++j 先挨个自增,然后 q = 8 + 8 + 8 = 24   , 所以 j = 8

这个应该是他规定好的,如果你要问为什么这样规定,我确实不知道。
像这种GCC处理的方式又不同。所以你只要记住就行了。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-20 12:20:33 | 显示全部楼层
你这个应该是GCC编译的吧。  GCC是先处理前两项,也就是:
q=(++j) + (++j) + (++j);
前两项的 ++j 先自加,得到 j = 7,然后 q = 7 + 7 + (++j);然后 ++j ,即 j = 8,q = 7 + 7 + 8 = 22
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-20 14:03:12 | 显示全部楼层
Drunkメ逍遥彡 发表于 2013-9-20 12:20
你这个应该是GCC编译的吧。  GCC是先处理前两项,也就是:
q=(++j) + (++j) + (++j);
前两项的 ++j 先自 ...

谢谢,明白了:lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-6 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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