关于a++与++a理解时容易烦迷糊(未定义行为,undefined behavior), 但在用时只要避免复杂难懂的表达式时,基本上都不会出错。如果需要全部理解二者区别,需要读2者的汇编语言。

下面谈一下自己的速记理解:

第一种

a++ ,名 后自增,因为加号在后面嘛,这个好理解,那往下一步思考,为什么叫后自增呢, 因为是先赋值,在自增运算。即下面b=a++,与下面等价:

int a = 1 ;// b = a++ ; 与下面等价b = a;  //先赋值
a = a +1;//后自增

a = 1 ; b = a++;执行后,最终 b为1 ,a为2。以后看到a++,就叫后自增就好了,然后在思考为啥叫,这样在宏观上就基本上理解了。

同理思考++a

++a,名 前自增,因为加号在前面嘛,这个好理解,那往下一步思考,为什么叫前自增呢, 因为是先自增运算,在进行赋值运算,在。即下面b=++a,与下面等价:

int a = 1 ;// b = ++a ; 与下面等价a = a +1;//先自增
b = a;  //后赋值

故 a = 1 ; b = ++a; 执行后,最终 b为2 ,a为2。  注意2个操作后的结果不同,前自增b为1,后自增b为2。以后看到++a,就叫前自增就好了。。。。

第2种

第二种比较绕一点,没有第一种那么直观,所以直接上代码了

int a = 5;// int b 相当于:5 + 6 + 7 = 18      int b = a++ + a++ + a;
// 执行完a++[运算]后a进行自增,不是执行完此条完整语句后a才自增,而是在同一条语句中a++以后的a都是自增以后的值  // a经过两次自增,所以它的值是7
int a = 5;// int b 相当于:6 + 7 + 7 = 20      int b = ++a + ++a + a;* a先进行自增,然后执行++a[元运算表达式]时.并且在同一条语句中,++a以后的a的值,都是自增以后的值// a经过两次自增,所以它的值也是7

进一步学习

上面讨论了基本数值类型,但如果是类情况呢。前自增比后自增速度快很多。

在程序开发中,++i 与 i++的区别在哪里? - 阿布的回答 - 知乎 https://www.zhihu.com/question/19811087/answer/2288880158

C语言中的a++与++a的速记理解相关推荐

  1. C语言中.h文件和.c文件如何理解?看完详细解析,小白也能懂!

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:        1.预处理阶段 2.词法与语法分析阶段        3.编译 ...

  2. C语言中p, *p, p, *p, **p的理解-初级

    *(星号):间接寻址运算符,通过一个内存地址访问一个值(一种操作). &(数学逻辑符号:与/和):取地址运算符,获取一个值的内存地址(一种操作). 直接寻址:直接通过变量名来获取变量的值,或直 ...

  3. c语言中cap捕捉函数,CAP理论的理解

    CAP理论的理解 CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中: 一致性(Consistency) 可用性(Availability) 分区容错性(Partition ...

  4. C语言中(a<b<c)的理解

  5. c语言中b的作用是什么意思,C语言中是什么意思?ab怎么理解?

    C语言中&是什么意思?a&b怎么理解?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言中& ...

  6. c语言中struct和c++中class实例对比

    前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...

  7. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  8. C语言中“野指针”、“悬空指针”是什么?

    目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...

  9. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

最新文章

  1. 关于Nikon Ai AF 28mm F1.4D遮光罩的问题
  2. AcWing 788 逆序对的数量-归并排序
  3. pat 乙级 1002 写出这个数(C++)
  4. 宠物次元经济专题分析2020
  5. 【C++】C++11 新特性(auto,decltype,nullptr,快速遍历,【Lambda表达式详解】)
  6. 程序员拯救乐坛?OpenAI 用“逆天”GPT2.0 搞了个 AI 音乐生成器
  7. Fultter之Future用法入门
  8. CANoe软件中制作DBC文件的小教程
  9. 服务器日志默认存放位置,系统日志和IIS日志存放路径
  10. OpenFeign实现微服务间的文件下载
  11. pdf虚拟打印机下载win7_如何将不同形式的PDF文档进行压缩?
  12. 微信小程序 转发 封装
  13. OpenCV单目平面测距
  14. 前端和后端哪个工资更高呢?
  15. c语言自定义结构,C语言如何定义结构体
  16. 纯净网站导航纯html无后台,仿360网址导航源码纯html页面无后台易操作修改无加密有留言后台...
  17. Safari插件机制研究(一)
  18. 数据库设计的阶段任务
  19. CORE | AAAI2020:分子自动优化模型
  20. winvnc异常,端口变为5901

热门文章

  1. 《推荐系统手册》笔记
  2. linux 无线网卡不好用,linux deepin 无线网卡不能用,打不开
  3. Android开发笔记(五十九)巧用传感器
  4. Python - 通过whl文件安装第三方库
  5. 电信盒子HG680-J 1.3.7刷机升级
  6. 【智能物流】PPT干货,智能物流系统
  7. jmeter 计数器_Jmeter之计数器
  8. 你想找的Python资料这里全都有!没有你找不到!史上最全资料合集
  9. Linux进阶 apache服务器;虚拟主机
  10. 信号处理--线性卷积与循环卷积