鱼C论坛

 找回密码
 立即注册
查看: 1032|回复: 6

[已解决]关于自增的问题

[复制链接]
发表于 2020-12-15 10:47:08 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main()
{
        int a;
        int b;
        int c;
        int d;
        
        a = 5;
        b = 5;
        
        c=(a++)+(a++)+(a++);
        d=(++b)+(++b)+(++b);
        
        printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
}

如上代码,d为啥等于22呢?连续3个++b不应该是6,7,8么,怎么不是21呢?
最佳答案
2020-12-15 11:01:32
本帖最后由 jackz007 于 2020-12-15 11:06 编辑

        不要纠结于这样极端的例子,不同的编译器会得到不同的结果
VC 16.8.2
D:\00.Excise\C>cl x.c
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.28.29334 版
版权所有(C) Microsoft Corporation。保留所有权利。

x.c
Microsoft (R) Incremental Linker Version 14.28.29334.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:x.exe
x.obj

D:\00.Excise\C>x
a=5,b=5,c=0,d=0
a=8,b=8,c=15,d=24

D:\00.Excise\C>

        gcc 9.2
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
a=5,b=5,c=0,d=0
a=8,b=8,c=18,d=22

D:\00.Excise\C>
        所以,这根本就不是知识点,你的纠结和烦恼毫无价值,忘记它吧!
        这也提示我们,为了避免出现这样的不确定性,一定要坚决禁止这样写代码!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-15 11:01:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-15 11:06 编辑

        不要纠结于这样极端的例子,不同的编译器会得到不同的结果
VC 16.8.2
D:\00.Excise\C>cl x.c
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.28.29334 版
版权所有(C) Microsoft Corporation。保留所有权利。

x.c
Microsoft (R) Incremental Linker Version 14.28.29334.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:x.exe
x.obj

D:\00.Excise\C>x
a=5,b=5,c=0,d=0
a=8,b=8,c=15,d=24

D:\00.Excise\C>

        gcc 9.2
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
a=5,b=5,c=0,d=0
a=8,b=8,c=18,d=22

D:\00.Excise\C>
        所以,这根本就不是知识点,你的纠结和烦恼毫无价值,忘记它吧!
        这也提示我们,为了避免出现这样的不确定性,一定要坚决禁止这样写代码!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-15 11:08:33 | 显示全部楼层
jackz007 发表于 2020-12-15 11:01
不要纠结于这样极端的例子,不同的编译器会得到不同的结果
VC 16.8.2

明白,但是有些考试里就有这种风格的题目,绕的脑袋疼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-15 11:16:42 | 显示全部楼层
dysow 发表于 2020-12-15 11:08
明白,但是有些考试里就有这种风格的题目,绕的脑袋疼


        这个事实也打脸那些喜欢出这种考题的人,能有标准答案吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-15 11:52:06 | 显示全部楼层
你所说的 d 等于 22 是错误的!你可以随便找一个编译器进行验证, d = 24
c = (a++) + (a++) + (a++)       // 先运算后自增
  = 5 + 5 + 5                             // a = a + 1 + 1 + 1
  = 15                                       // a = 8
d = (++b) + (++b) + (++b)       // 先自增后运算
  = 8 + 8 + 8                             // b = b + 1 + 1 + 1
  = 24                                       // b = 8
自加.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-15 12:48:34 | 显示全部楼层
风过无痕1989 发表于 2020-12-15 11:52
你所说的 d 等于 22 是错误的!你可以随便找一个编译器进行验证, d = 24
c = (a++) + (a++) + (a++)      ...

        说话不要那么武断,d = 24 说明你使用 vc 编译器,你再用 gcc 编译试试看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 10:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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