深入理解++和 -- 操作

目录

博文内容:

深刻认识C语言的++/--操作

本讲将会教你如何理解前置++,后置++问题

★博文转载请注明出处。

++、--操作

基操:

深刻理解 a++

复杂表达式

 总结:

后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                               ——By 作者:德塔


博文内容:

深刻认识C语言的++/--操作

本讲将会教你如何理解前置++,后置++问题

★博文转载请注明出处。


++、--操作

基操:

在这里++和 -- 的执行顺序一致,我们就以++为例

#include <stdio.h>

int main()
{
    int a = 10;
    int b = ++a; //前置++, 先自增在使用
    printf("%d, %d\n", a, b); //11,11

    return 0;
}
#include <stdio.h>

int main()
{
    int a = 10;
    int b = a++; //后置++, 先使用在自增
    printf("%d, %d\n", a, b); //11, 10

    return 0;
}

 前置++、-- :都是先自增再使用

 后置++、-- :都是先使用再自增


深刻理解 a++

int main()
{
    int a = 0xDD;
    int b = a++; //有b接收,那么a的先使用是将a的值(内容),放到b中
    int c = 0xEE;

    c++; //没有接收方,那么"先使用",如何理解?

return 0;
}

这里的具体理解是需要用到汇编语言的,汇编语言不是本节的重点,我们直接记一下结论:

a++完整的含义是先使用,在自增。如果没有变量接收,那么直接自增


复杂表达式

#include <stdio.h>

int main()
{
    int i = 1;
    int j = (++i)+(++i)+(++i);
    printf("%d\n", j);

    return 0;
}

三个自增符连接起来后构成的表达式,我们可以计算一下这个表达式的结果,然后再把代码复制到编译器中自己运行一下试试看,这个问题是没有正解的,为什么呢?下面我们来分析一下原因。

在vs中,输出结果为12,而在Linux中输出结果就为10

vs是把三个i++全部执行后再把数据拿到寄存器中相加计算,也就是四个4相加

而在linux下的gcc编译器是想把前两个先计算出来,是两个3相加,之后再和后一个(4)相加,为10

 总结:

在复杂表达式中,尤其是计算路径不唯一的场景中,由于很多编译器加载进内存中的顺序不同,最后导致计算路径不唯一,计算结果也就不唯一


后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                               ——By 作者:德塔

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸福西西弗斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值