深入理解++和 -- 操作

简介: 深入理解++和 -- 操作

博文内容:

深刻认识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 作者:德塔

相关文章
|
2月前
|
Windows
该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置“页面中创建关联
【10月更文挑战第22天】当你遇到“该文件没有与之关联的应用来执行该操作”的提示时,通常是因为文件类型未关联应用或文件损坏。解决方法包括:1. 确定文件类型并安装合适的应用程序,如Microsoft Office、Adobe Acrobat Reader等;2. 如果已安装应用,进入系统设置关联文件类型;3. 检查文件完整性,重新下载或验证文件格式。
1890 1
|
6月前
|
SQL 数据库
`UPDATE FROM` 的语法以及常见的更新操作方式
`UPDATE FROM` 的语法以及常见的更新操作方式
1198 2
|
7月前
|
Linux 数据安全/隐私保护
HMC配置及操作
HMC配置及操作
124 0
|
7月前
|
关系型数据库 MySQL 测试技术
MySQL中,当update修改数据与原数据相同时会再次执行吗
MySQL中,当update修改数据与原数据相同时会再次执行吗
47 0
|
关系型数据库 MySQL 数据库
数据的移除与删除:探究MySQL中的DELETE操作
在数据库管理中,删除不再需要的数据是一项重要任务,"DELETE"语句正是用于实现这一目标的命令。通过DELETE操作,我们可以从数据库表中移除数据记录。
529 0
|
关系型数据库 MySQL 数据库
数据的修改与更新:探究MySQL中的UPDATE操作
在数据库管理中,修改已存在的数据是一项常见任务,"UPDATE"语句正是用于实现这一目标的命令。通过UPDATE操作,我们可以对数据库中的现有数据进行修改。
305 0
|
SQL IDE NoSQL
tp5源码解析--Db操作
在TP5的框架使用过程中,Db类是一定会接触到的,上手不难,但若想随心所欲的用,还是需要了解一番。用了千次,却没看过一次源码,学习源码,起码对TP5这个框架使用更加得心应手,毕竟技术服务于业务,能够写出更简介、更方便、更有效的业务代码,本身就是一件身心愉悦的事儿;
157 0
|
NoSQL Redis 开发者
通用指令-db其他操作| 学习笔记
快速学习通用指令-db其他操作
通用指令-db其他操作| 学习笔记