【C语言】探究a++与++a的区别
使用软件: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的区别相关推荐
- c语言scanf与gets区别,C语言 scanf()和gets()函数的区别
C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求"从控 ...
- 强类型语言和静态类型语言有什么区别?
另外,一方是否意味着另一方? #1楼 强类型意味着类型之间的转换之间存在限制. 静态类型意味着类型不是动态的 - 一旦创建变量,就无法更改变量的类型. #2楼 这经常被误解,所以让我澄清一下. 静态/ ...
- c语言 python-C语言和python的区别
Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...
- run在java_Java语言start和run方法的区别
Java语言start和run方法的区别 导语:Thread类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法.那么它和start方法有什么不同呢?让我们了解一下吧! 调用start ...
- C语言 scanf()和gets()函数的区别
C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求"从控 ...
- C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程
目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用 三.猜你喜欢 零基础 C/C ...
- C语言 #include <> 与 #include “” 区别 - C语言零基础入门教程
目录 一.什么是头文件 二.#include <> 三.#include "" 四.#include <> 与 #include "" ...
- C语言 函数指针和指针函数区别 - C语言零基础入门教程
目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...
- C语言 指针数组和数组指针区别 - C语言零基础入门教程
目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组和数组指针区别 1.指针数组 2.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> ...
- C语言和C++语言在语法上面的部分区别
(2011-03-16 17:12:13) 标签: 杂谈 分类:计算机 C语言和C++语言在语法上面的部分区别: 1.C语言的定义必须在最前面,C++可以在任何地方定义,比如 for(int i=0; ...
最新文章
- Winform中设置ZedGraph因设置小刻度导致的竖直虚线显示过多
- 20165115 第二周学习总结
- 离线安装python环境
- Python3网络爬虫开发实战,抓包工具 Charles 的使用
- 基于DDD的golang实现
- Java中Date, Calendar, SimpleDateFormat的相互转换
- SpringBoot中静态资源和首页定制
- 使用MemCache进行相关缓存的保存处理
- 2021-08-17Cookie 详解
- 黑马程序员视频-微信小程序-原生框架——项目搭建
- php宠物社交领养网站
- cad缩放_如何把jpg图片作为背景用cad描图?【AutoCAD教程】
- 洛谷P1063 能量项链
- WPF无边框窗体拖动
- 编写一程序,将两个字符串连接起来,结果取代第一个字符串。(三种方法)
- 提高客户转化率的关键点
- Unity中打开文件窗口(OpenFileDialog)的几种方法对比
- Mybatis - xml文件标签中写注释
- 06|领域拆分:如何合理地拆分系统?
- 【JavaScript】自定义函数