为什么q的值不是21?
#include <stdio.h>
intmain()
{
int i=8,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d\n",p,q,i,j);
return 0;
}
我自己计算的是q=6+7+8=21,但是计算机的结果是22,这是为什么呢?
求指点! q= a + b+ c
q= (a + b) + c
加法的结合律:从左向右
cplus 发表于 2019-9-15 19:56
q= a + b+ c
q= (a + b) + c
都是21啊 q=(++j)+ (++j) + (++j)
q= (7 + 7 )+ 8
知识点:优先级
cplus 发表于 2019-9-16 09:43
q=(++j)+ (++j) + (++j)
q= (7 + 7 )+ 8
那也是q=(6+6)+7,更不对啊…… 没有正确答案
E:\tmp>cat main.c
#include <stdio.h>
intmain()
{
int i=8,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d\n",p,q,i,j);
return 0;
}
E:\tmp>gcc -g -Wall -o main main.c
main.c: In function 'main':
main.c:6:12: warning: operation on 'i' may be undefined [-Wsequence-point]
p=(i++)+(i++)+(i++);
~~^~~
main.c:6:12: warning: operation on 'i' may be undefined [-Wsequence-point]
main.c:7:11: warning: operation on 'j' may be undefined [-Wsequence-point]
q=(++j)+(++j)+(++j);
~^~~~
main.c:7:11: warning: operation on 'j' may be undefined [-Wsequence-point]
E:\tmp>main
27,22,11,8
E:\tmp> 一般不这样编代码{:5_104:} 本帖最后由 cplus 于 2019-9-16 17:25 编辑
兄弟,按优先级的顺序去加,把结合律和优先级的知识,放在一起看 {:10_282:} 说实话,你研究这个,真没多大意义,不同的编译器的答案都可能不一样,当然了,你觉得有价值,有意思,可以继续干 pythonsrj 发表于 2019-9-16 17:38
说实话,你研究这个,真没多大意义,不同的编译器的答案都可能不一样,当然了,你觉得有价值,有意思,可以 ...
不是研究,主要是刷二级题库刷到了,然后,跟我算的不一样啊就很懵 cplus 发表于 2019-9-16 17:22
兄弟,按优先级的顺序去加,把结合律和优先级的知识,放在一起看
哦,知道了,我用q=(++j)+(++j),发现值是14然后才明白原来它是这样处理的{:10_284:}
页:
[1]