鱼C论坛

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

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

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

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

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

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a;
  5.         int b;
  6.         int c;
  7.         int d;
  8.        
  9.         a = 5;
  10.         b = 5;
  11.        
  12.         c=(a++)+(a++)+(a++);
  13.         d=(++b)+(++b)+(++b);
  14.        
  15.         printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
  16. }
复制代码


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

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

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

  7. /out:x.exe
  8. x.obj

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

  12. D:\00.Excise\C>
复制代码


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

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

  5. D:\00.Excise\C>
复制代码

        所以,这根本就不是知识点,你的纠结和烦恼毫无价值,忘记它吧!
        这也提示我们,为了避免出现这样的不确定性,一定要坚决禁止这样写代码!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

  7. /out:x.exe
  8. x.obj

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

  12. D:\00.Excise\C>
复制代码


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

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

  5. D:\00.Excise\C>
复制代码

        所以,这根本就不是知识点,你的纠结和烦恼毫无价值,忘记它吧!
        这也提示我们,为了避免出现这样的不确定性,一定要坚决禁止这样写代码!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

明白,但是有些考试里就有这种风格的题目,绕的脑袋疼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


        这个事实也打脸那些喜欢出这种考题的人,能有标准答案吗?
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://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 编译试试看。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-8 01:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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