使用软件:vs2019(其他编译器可能有所不同)

前言:众所周知,a++为先取值再自增,++a为先自增再取值,但仅通过两句话并不好理解其在编译器中的实际运行逻辑,笔者因此进行实验得出了其背后运行逻辑,若有错误/遗漏欢迎指出/补充

先放结论:

a++:先取a初始值为值参与本行的运算,本行结束后,a进行自增

++a:先执行本行所有自增操作(无论前后缀),再取自增结果为值参与本行运算

节省时间版:

详细解说版:

第一步:验证i++均取 i 初始值参与运算

解析:a = 10+10+10+10,输出40,在该语句中,i++取初始值10为值参与运算。i 经过4次自增最后输出14。

第二步:将两个i++改为++i,验证++i的执行方式为先自增(整行)后取值

解析:a = 14+14+10+10,输出48,在该语句中,共有4个自增运算符,++i 先在初始值10的基础上进行4次自增得到结果14,并以此结果参与运算,而 i++ 取i的初始值10为值参与运算。

第三步:将赋值对象由a改为i,验证i++是在语句结束后执行

解析:i = 14+14+10+10,输出50(而不是48),在该语句中,共有4个自增运算符,++i 先进行4次自增得到结果14,并以此结果参与运算,而 i++ 取i的初始值10为值参与运算,此时 i 值为48 ;因为语句中存在2个i++,语句结束后 i 执行2次自增,最终输出结果为48+2=50。

第四步:将1个++i替换为i++,验证上述理论是否正确

解析:i = 14+10+10+10,在该语句中,输出47(而不是44),共有4个自增运算符,++i 先进行4次自增得到结果14,并以此结果参与运算,而 i++ 取i的初始值10为值参与运算,此时 i 值为44;因为语句中存在3个i++,语句结束后 i 执行3次自增,最终输出结果为44+3=47。

综上所述

在vs2019中

a++:先取a为值参与本行的运算,本行结束后,a进行自增

++a:先执行本行所有自增操作(无论前后缀),再取自增结果为值参与本行运算

【C语言】探究a++与++a的区别相关推荐

  1. c语言scanf与gets区别,C语言 scanf()和gets()函数的区别

    C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求"从控 ...

  2. 强类型语言和静态类型语言有什么区别?

    另外,一方是否意味着另一方? #1楼 强类型意味着类型之间的转换之间存在限制. 静态类型意味着类型不是动态的 - 一旦创建变量,就无法更改变量的类型. #2楼 这经常被误解,所以让我澄清一下. 静态/ ...

  3. c语言 python-C语言和python的区别

    Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...

  4. run在java_Java语言start和run方法的区别

    Java语言start和run方法的区别 导语:Thread类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法.那么它和start方法有什么不同呢?让我们了解一下吧! 调用start ...

  5. C语言 scanf()和gets()函数的区别

    C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求"从控 ...

  6. C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程

    目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用 三.猜你喜欢 零基础 C/C ...

  7. C语言 #include <> 与 #include “” 区别 - C语言零基础入门教程

    目录 一.什么是头文件 二.#include <> 三.#include "" 四.#include <> 与 #include "" ...

  8. C语言 函数指针和指针函数区别 - C语言零基础入门教程

    目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...

  9. C语言 指针数组和数组指针区别 - C语言零基础入门教程

    目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组和数组指针区别 1.指针数组 2.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> ...

  10. C语言和C++语言在语法上面的部分区别

    (2011-03-16 17:12:13) 标签: 杂谈 分类:计算机 C语言和C++语言在语法上面的部分区别: 1.C语言的定义必须在最前面,C++可以在任何地方定义,比如 for(int i=0; ...

最新文章

  1. Winform中设置ZedGraph因设置小刻度导致的竖直虚线显示过多
  2. 20165115 第二周学习总结
  3. 离线安装python环境
  4. Python3网络爬虫开发实战,抓包工具 Charles 的使用
  5. 基于DDD的golang实现
  6. Java中Date, Calendar, SimpleDateFormat的相互转换
  7. SpringBoot中静态资源和首页定制
  8. 使用MemCache进行相关缓存的保存处理
  9. 2021-08-17Cookie 详解
  10. 黑马程序员视频-微信小程序-原生框架——项目搭建
  11. php宠物社交领养网站
  12. cad缩放_如何把jpg图片作为背景用cad描图?【AutoCAD教程】
  13. 洛谷P1063 能量项链
  14. WPF无边框窗体拖动
  15. 编写一程序,将两个字符串连接起来,结果取代第一个字符串。(三种方法)
  16. 提高客户转化率的关键点
  17. Unity中打开文件窗口(OpenFileDialog)的几种方法对比
  18. Mybatis - xml文件标签中写注释
  19. 06|领域拆分:如何合理地拆分系统?
  20. 【JavaScript】自定义函数

热门文章

  1. 优秀的智慧水务解决方案是如何炼成的
  2. PSIM仿真简单例程(频率响应)
  3. Java 生态圈中的嵌入式数据库,哪家强?
  4. 【Linux】部署web项目
  5. 【深度学习实验室服务器搭建整体思路】
  6. 基于SSM+Vue游戏商城系统Java游戏攻略网站(源码调试+讲解+文档)
  7. Spring自带的工具类
  8. postman测试接口被登陆拦截,怎么办?
  9. brave浏览器_“隐私至上” Brave浏览器退出测试版
  10. 搭建RabbitMQ集群