鱼C论坛

 找回密码
 立即注册
查看: 2309|回复: 11

关于++i

[复制链接]
发表于 2022-12-30 19:52:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Vally-X 于 2022-12-30 20:03 编辑

        int i = 5, j = 5, p, q;
        p = (i++) + (i++) + (i++);
        q = (++j) + (++j)+(++j);
        printf("p=%d,q=%d,i=%d,j=%d", p, q, i, j);
      

        在vs2019跑出来是p=15,q=24,i=8,j=8
        请问q的执行过程是怎样的呢?萌新诚心求解~

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

使用道具 举报

发表于 2022-12-31 08:34:48 | 显示全部楼层
我对你的p和q都很疑惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 08:37:00 | 显示全部楼层
Q关闭给发  你38.png
你看。我编译出来的跟你不一样
我这里面的 p 我能解释,但 q 也解释不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 08:51:04 | 显示全部楼层
编译器的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 09:57:32 | 显示全部楼层

那么,请问,您的答案是多少呢?
我自己推出来 p = 18 , q = 21 为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-31 10:00:49 | 显示全部楼层
额外减小 发表于 2022-12-31 09:57
那么,请问,您的答案是多少呢?
我自己推出来 p = 18 , q = 21 为什么呢

sh-5.1$ ./main
p=18,q=22,i=8,j=8sh-5.1$

都和你说了,标准没有规定这样的代码的结果是什么,不同的编译器很有可能会给出不同的结果

评分

参与人数 1鱼币 +1 收起 理由
额外减小 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2022-12-31 10:04:55 | 显示全部楼层
人造人 发表于 2022-12-31 10:00
sh-5.1$ ./main
p=18,q=22,i=8,j=8sh-5.1$

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

使用道具 举报

发表于 2022-12-31 16:10:35 | 显示全部楼层
++j是先自加1,再参与运算,而前面的i++是先参与运算,再加1
p=5+6+7是对的,但我的编译器算的q确实22,我觉得应该是21
这个应该是由于编译器的不同造成的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-4 23:35:15 | 显示全部楼层
q=(++j)+(++j) ==> q=14, don't know why.

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

使用道具 举报

发表于 2023-1-5 14:41:29 | 显示全部楼层
这个要看编译器,有的等于22,有的等于24

在执行   q = (++j) + (++j)+(++j);    的时候:
    ①先计算 (++j)+(++j),j自增2次(即j=5+1+1=7),再将结果 加上(++j)。所以q=7+7+8=22。
    ②还有一种情况就是  直接将j自增3次。所以q=8+8+8=24。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-5 14:42:54 | 显示全部楼层
N781791878 发表于 2023-1-5 14:41
这个要看编译器,有的等于22,有的等于24

在执行   q = (++j) + (++j)+(++j);    的时候:

参考了编程论坛:https://bbs.bccn.net/thread-218784-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-6 15:44:02 | 显示全部楼层
本帖最后由 ExiaGN001 于 2023-1-6 15:51 编辑

一般来说执行结果是这样的:

p:
i=5;
i++值 为5 ,(i变为6)
i++值 为6 ,(i变为7)
i++值 为7 ,(i变为8)

p=(i++)+(i++)+(i++)=5+6+7= 18

q:
j=5;
++j值 为6 ,(j变为6)
++j值 为7 ,(j变为7)
++j值 为8 ,(j变为8)
q=(++j)+(++j)+(++j)=6+7+8= 21

以上是我认为p,q应该出现的结果

Code::blocks 20.03 GCC的结果是 p=18,q=22
我无法理解vs2019和C::B对这段代码的运行逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-24 18:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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