吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1231|回复: 16
收起左侧

[求助] 自增运算

[复制链接]
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++:参与运算后再自增

这个才是正解
两只老虎 发表于 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的值没有任何关系了


免费评分

参与人数 1热心值 +1 收起 理由
领悟者的涂鸦笔 + 1 我想起了编译原理里面的语义分析

查看全部评分

mi0070 发表于 2020-12-3 20:38
是的,我测试了,Java里面是一样的。
sp201203_203259.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表