Vally-X 发表于 2022-12-30 19:52:11

关于++i

本帖最后由 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的执行过程是怎样的呢?萌新诚心求解~

额外减小 发表于 2022-12-31 08:34:48

我对你的p和q都很疑惑{:10_249:}

额外减小 发表于 2022-12-31 08:37:00


你看。我编译出来的跟你不一样
我这里面的 p 我能解释,但 q 也解释不了

liuzhengyuan 发表于 2022-12-31 08:51:04

编译器的问题

额外减小 发表于 2022-12-31 09:57:32

liuzhengyuan 发表于 2022-12-31 08:51
编译器的问题

那么,请问,您的答案是多少呢?
我自己推出来 p = 18 , q = 21 为什么呢

人造人 发表于 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$

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

额外减小 发表于 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$



好吧。谢谢{:10_323:}

tianmengzhou 发表于 2022-12-31 16:10:35

++j是先自加1,再参与运算,而前面的i++是先参与运算,再加1
p=5+6+7是对的,但我的编译器算的q确实22,我觉得应该是21
这个应该是由于编译器的不同造成的吧

Rix 发表于 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

N781791878 发表于 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。
{:10_254:}{:10_254:}{:10_254:}

N781791878 发表于 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

ExiaGN001 发表于 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对这段代码的运行逻辑
页: [1]
查看完整版本: 关于++i