关于++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的执行过程是怎样的呢?萌新诚心求解~
我对你的p和q都很疑惑{:10_249:}
你看。我编译出来的跟你不一样
我这里面的 p 我能解释,但 q 也解释不了 编译器的问题 liuzhengyuan 发表于 2022-12-31 08:51
编译器的问题
那么,请问,您的答案是多少呢?
我自己推出来 p = 18 , q = 21 为什么呢 额外减小 发表于 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:00
sh-5.1$ ./main
p=18,q=22,i=8,j=8sh-5.1$
好吧。谢谢{:10_323:} ++j是先自加1,再参与运算,而前面的i++是先参与运算,再加1
p=5+6+7是对的,但我的编译器算的q确实22,我觉得应该是21
这个应该是由于编译器的不同造成的吧
q=(++j)+(++j) ==> q=14, don't know why.
q=++j ; q= q+(++j); q= q+(++j); ==> q=21,j=8
这个要看编译器,有的等于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:41
这个要看编译器,有的等于22,有的等于24
在执行 q = (++j) + (++j)+(++j); 的时候:
参考了编程论坛:https://bbs.bccn.net/thread-218784-1-1.html 本帖最后由 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]