鱼C论坛

 找回密码
 立即注册
查看: 1472|回复: 8

[已解决]这又是什么鬼?

[复制链接]
发表于 2019-1-21 00:16:33 | 显示全部楼层 |阅读模式

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

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

x
#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", p, q, i, j);
}
程序运行得
18
22
8
8
可是我口算的结果为18,21,8,8
据说不同的编译器算出来的结果不一样,可以仔细讲解一下吗?
最佳答案
2019-1-21 01:08:03
q=(++j)+(++j)+(++j);
7 + 7 + 8 = 22


q = (   (++j) + (++j)  )   +  (++j);

++j;
++j;
j变成了7
7 + 7 = 14

14 + (++j)
14 + 8 = 22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-21 00:38:45 | 显示全部楼层
1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 01:02:51 | 显示全部楼层
p=(i++)+(i++)+(i++);
5 + 6 + 7 = 18

p=(i++)+(i++)+(i++);
5 + 5 + 5 = 15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 01:05:28 | 显示全部楼层
q=(++j)+(++j)+(++j);
8 + 8 + 8 = 24

q=(++j)+(++j)+(++j);
7 + 7 + 8 = 22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 01:08:03 | 显示全部楼层    本楼为最佳答案   
q=(++j)+(++j)+(++j);
7 + 7 + 8 = 22


q = (   (++j) + (++j)  )   +  (++j);

++j;
++j;
j变成了7
7 + 7 = 14

14 + (++j)
14 + 8 = 22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 01:08:34 | 显示全部楼层
   7:main.c        ****         q=(++j)+(++j)+(++j);
  43                              .loc 1 7 0
  44 0048 83442428                 addl        $1, 40(%esp)
  44      01
  45 004d 83442428                 addl        $1, 40(%esp)
  45      01
  46 0052 8B442428                 movl        40(%esp), %eax
  47 0056 8D1400                   leal        (%eax,%eax), %edx
  48 0059 83442428                 addl        $1, 40(%esp)
  48      01
  49 005e 8B442428                 movl        40(%esp), %eax
  50 0062 01D0                     addl        %edx, %eax
  51 0064 89442420                 movl        %eax, 32(%esp)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 10:49:10 | 显示全部楼层
试试这个?
#include<stdio.h>

int 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);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-21 11:53:38 | 显示全部楼层
人造人 发表于 2019-1-21 01:08
q=(++j)+(++j)+(++j);
7 + 7 + 8 = 22

也就是说只是编译器算法的问题,对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 13:07:21 | 显示全部楼层
Logic-闫 发表于 2019-1-21 11:53
也就是说只是编译器算法的问题,对吧

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 06:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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