箜白 发表于 2014-9-30 12:29:53

【C语言】 i++ 与 ++i

#include <stdio.h>

void main()
{
        int i = 5,
                j = 5,
                p, q;
        p = (i++ )+ (i++ );
        q = (++j )+ (++j );
        printf("%d, %d, %d, %d\n", p, q, i, j );
}


求助:为什么 q = 14 ,而不等于13呢?

Answer.zhang 发表于 2014-9-30 16:49:18

根据优先级,先进行括号里面的运算, 第一个括号里面运行以后j=6,第二个括号里面运行以后j=7,你的疑问就是那6+7不是等于13吗?但是,C语言的局部变量是在栈里面存储,你暂时可以将这个式子理解为q = (j = j+1) + (j = j+1); 第一个括号里面的j和第二个括号里面的j是栈里面同一个地址存储的同一个值,所以,运行完第二个括号以后,前面一个括号的值也就变成7了,所以q=7+7=14.

箜白 发表于 2014-10-10 15:51:56

Answer.zhang 发表于 2014-9-30 16:49
根据优先级,先进行括号里面的运算, 第一个括号里面运行以后j=6,第二个括号里面运行以后j=7,你的疑问就是 ...

#include <stdio.h>
void main()
{
      int j = 5, q;
      q = (++j )+ (++j )+ (++j);
      printf("%d, %d\n", q, j );
}

但是 这里为什么又是 q= 7+ 7+ 8= 22 了呢?

泉水 发表于 2014-10-10 16:30:09

箜白 发表于 2014-10-10 15:51
但是 这里为什么又是 q= 7+ 7+ 8= 22 了呢?

系统会先计算前两个++j,结果为14,然后再++j,14+8=22!
这个要了解CPU怎样处理数据,以前在哪看过,具体也不太清楚!

policewj 发表于 2014-10-10 17:48:59

policewj 发表于 2014-10-10 17:49:44

泉水 发表于 2014-10-11 09:24:40

程序会先计算前两个++i,q=(++i)+(++i)+(++i)第一个++i之后,为6,再第二个之后,为7,这时i=7,这时有q=7+7+(++i);i再自加一,为8,q=7+7+8=22;

如果有N多个++i,同样,先计算前两个++i,改变数值之后,其实相当于i已经加了2,再执行就是一次加一;比如,i=5,q=(++i)+(++i)+(++i)+(++i),就是q=7+7+8+9=31;

有专业人士说过这是计算顺序点的问题,是一个无意义的问题,我们不必计较这些毫无意义的问题!

大个的糖果 发表于 2014-10-31 23:47:11

页: [1]
查看完整版本: 【C语言】 i++ 与 ++i