dodooo 发表于 2020-12-3 18:10

自增运算

#include <stdio.h>
int main() {
    printf("");
    int i = 3,x = 0;
    x= (++i)+(i++);
    printf("%d",x);

    printf("\n");
    int y =3,z=0;
    z= (++y);
    z= z+(y++);
    printf("%d",z);


    return 0;
}

这个自增 为啥 上下两行结果不一样啊

kiseyzed 发表于 2020-12-3 18:40

x= (++i)+(i++);
这句结果x=2i+1

庸人误我 发表于 2020-12-3 18:45

z= (++y);
z= z+(y++);
整理一下不就是
z=(++y) + (y++);
x= (++i)+(i++);
这两个不就是变量的名称不一样吗?

真的小白 发表于 2020-12-3 19:03

++y:先进行自增再参与运算
y++:参与运算后再自增

wanmei 发表于 2020-12-3 19:18

庸人误我 发表于 2020-12-3 18:45
z= (++y);
z= z+(y++);
整理一下不就是


不一样,你把x改成Z那个格式,就和Z一样了。

wanmei 发表于 2020-12-3 19:19

拆开两句和一句的运算顺序不同,然后自增结果就不一样。

mi0070 发表于 2020-12-3 19:38

真的小白 发表于 2020-12-3 19:03
++y:先进行自增再参与运算
y++:参与运算后再自增

这个才是正解{:1_921:}

两只老虎 发表于 2020-12-3 19:40

Java中是一样的

answer_zhang 发表于 2020-12-3 19:45

首先你对自增运算符的理解并没有错,而是没有理解全,++i和i++的区别有两层含义,第一,运算顺序不同,不做赘述,第二,++i属于左值,i++只能是右值
z=8很好理解,我就不赘述了,为什么x=9呢?
x=(++i) + (i ++);
编译器先从左到右优先计算括号里的算式
第一步计算完相当于:
i = i+1;
x = i + (i++);
第二步计算完相当于:
x=i + 4;此时i经过自增已经变成了5
所以x=5+4;

如果讲到这里还没明白的话,就需要回头看一下左值和右值的区别了,在 c 语言中,通常来说有名字的变量就是左值(如上面例子中的 x, z和++i),而由运算操作(加减乘除,函数调用返回值等)所产生的中间结果(没有名字)就是右值比如++i,
所以第一个式子x相当于计算i + 4,此时i已经等于5(计算i++时产生中间值,然后i自增加1)
而第二个式子z的值相当于计算4+4. 即使此时i也等于5,然而已然和z的值没有任何关系了


mi0070 发表于 2020-12-3 20:38

是的,我测试了,Java里面是一样的。
页: [1] 2
查看完整版本: 自增运算