落花于梦 发表于 2019-9-13 19:04:09

为什么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,这是为什么呢?
求指点!

cplus 发表于 2019-9-15 19:56:43

q= a + b+ c
q= (a + b) + c

加法的结合律:从左向右

落花于梦 发表于 2019-9-16 09:25:47

cplus 发表于 2019-9-15 19:56
q= a + b+ c
q= (a + b) + c



都是21啊

cplus 发表于 2019-9-16 09:43:47

q=(++j)+ (++j) + (++j)
q= (7      +    7 )+   8

知识点:优先级

落花于梦 发表于 2019-9-16 11:32:12

cplus 发表于 2019-9-16 09:43
q=(++j)+ (++j) + (++j)
q= (7      +    7 )+   8



那也是q=(6+6)+7,更不对啊……

人造人 发表于 2019-9-16 12:38:21

没有正确答案

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>

lh1996 发表于 2019-9-16 14:52:54

一般不这样编代码{:5_104:}

cplus 发表于 2019-9-16 17:22:27

本帖最后由 cplus 于 2019-9-16 17:25 编辑

兄弟,按优先级的顺序去加,把结合律和优先级的知识,放在一起看

雷蛇 发表于 2019-9-16 17:31:25

{:10_282:}

pythonsrj 发表于 2019-9-16 17:38:15

说实话,你研究这个,真没多大意义,不同的编译器的答案都可能不一样,当然了,你觉得有价值,有意思,可以继续干

落花于梦 发表于 2019-9-16 19:54:11

pythonsrj 发表于 2019-9-16 17:38
说实话,你研究这个,真没多大意义,不同的编译器的答案都可能不一样,当然了,你觉得有价值,有意思,可以 ...

不是研究,主要是刷二级题库刷到了,然后,跟我算的不一样啊就很懵

落花于梦 发表于 2019-9-16 19:59:24

cplus 发表于 2019-9-16 17:22
兄弟,按优先级的顺序去加,把结合律和优先级的知识,放在一起看

哦,知道了,我用q=(++j)+(++j),发现值是14然后才明白原来它是这样处理的{:10_284:}
页: [1]
查看完整版本: 为什么q的值不是21?