C/C++的前置++、后置++以及前置--、后置--使用的详细讲解

news2024/11/28 0:30:06

在c/c++语言中,变量的自增和自减经常被使用到,所以今天就来个详细讲解。本次讲解用到的语言是c语言,在c++中的原理也是一样的。

变量自增自减分为四种情况,每种情况的结果都有所差异,四种情况分别为前置++、后置++、前置--、后置--。下面我们就详细对这四种情况进行学习。

1、前置++

写法:++i

就是把++操作符放在变量的前面,那怎么用呢,我们就以代码的形式展示。

int i = 2;
printf("%d\n",++i);
printf("%d\n", i);

我们看上面的代码,定义了一个变量i,如果分别打印++i和i的结果,那铁子们思考一下结果是什么呢?思考出来了就看下面编译器的结果,是不是跟你想的一样呢?

结果为什么是这样?要想知道,那我们就先搞清楚++i是什么原理?

++i,这条代码其实编译器做了两步操作,是哪两步操作呢。

int i = 2;
//++i的两步操作
(++i) = i + 1;
i = i + 1;

所以编译器看到++i操作之后,会先让(++i)的结果等于 i + 1,然后i = i + 1;这两步执行完了之后就相当于++i执行完了。所以大家看到这里,就知道了++i这个操作的原理了吧,也知道上面的代码结果为什么是3、3了吧。

有了++i的基础了,其他三种情况也大差不差的。

2、后置++

写法:i++

我们就直接上代码。

这个代码和上面的代码一样,只是把++i变成了i++,为什么结果就变了呢。

其实编译器看到i++这个操作之后,内部也会去执行两个操作。

//i++的两步操作
(i++) = i;
i = i+1;

编译器看到i++操作之后,会先让(i++)的结果等于 i ,然后i = i + 1;这两步执行完了之后就相当于i++执行完了。所以上面代码的结果为2、3。

3、前置--

写法:--i

这里--i和++i是一样的原理,只是把自增变成了自减。我们也来看看编译器是如何执行的吧。

 //--i的两步操作
 (--i) = i - 1;
 i = i - 1;

编译器看到--i操作之后,会先让(--i)的结果等于 i -1,然后i = i - 1;这两步执行完了之后就相当于--i执行完了。所以上面代码的结果为1、1。

4、后置--

写法:i--

这里i--和i++是一样的原理,只是把自增变成了自减。我们也来看看编译器是如何执行的吧。

   //--i的两步操作
  (i--) = i;
  i = i - 1;

编译器看到i--操作之后,会先让(i--)的结果等于 i ,然后i = i - 1;这两步执行完了之后就相当于i--执行完了。所以上面代码的结果为2、1。

上面四种情况中,我们都把++i、i++、--i、i--可以看成一个表达式进行处理,如果代码为int i = 2;int a = ++i;代码中a的值为(++i)表达式的值,而这个值又是变量i进行操作之后的值。

前置++、前置--: 变量先自增或自减,然后把变量的值赋给表达式。

后置++、后置--: 先把变量的值赋给表达式,然后变量自增或自减。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码整洁之道【2】--函数

关于函数部分的总结 一、函数只做一件事 函数应该只做一件事、做好这件事、只做这件事。 判断函数是否不止做了一件事,还有一个方法,就是看是否能再拆出一个函数,该函数不仅只是单纯地重新 二、函数尽量不要太长 按照作者的理论&#xff…

MQ之————如何保证消息的可靠性

MQ之保证消息的可靠性 1.消费端消息可靠性保证: 1.1 消息确认(Acknowledgements): 消费者在接收到消息后,默认情况下RabbitMQ会自动确认消息(autoAcktrue)。为保证消息可靠性,可以…

VMware启动显示“打开虚拟机时出错: 获取该虚拟机的所有权失败”

提示框(忘截图了)里提示目录C:\Users\mosep\Documents\Virtual Machines\VM-Win10 x64\中的某个文件(在我这里好像是VM-Win10 x64.vmx,VM-Win10 x64是我给虚拟机取的名字)在被使用中。 找到这个目录,删除.…

【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化

CRM系统 CRM(Customer Relationship Management,客户关系管理)系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中,CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。 搭建…

NumPy进阶(二)

2. NumPy进阶(二) 2.1 Numpy数组操作 2.1.1 添加元素 numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中 注意: 插入的维度要保证所有数组的长度是相同的如果没有指定轴,数组会被扁平处理 ndarr…

MOMENT: A Family of Open Time-series Foundation Models

MOMENT: A Family of Open Time-series Foundation Models PDF: https://arxiv.org/pdf/2402.03885.pdf Code: https://anonymous.4open.science/r/BETT-773F/README.md 1 概述 MOMENT是一个用于通用时间序列分析的开源基础模型系列。由于缺少大型公共时间序列存储库、时间序…

matlab:有限差分求解纳维尔(Navier)边界的双调和(Biharmonic)方程,边值为零

我们考虑如下形式的双调和方程的数值解 其中,Ω是欧氏空间中的多边形或多面体域,在其中,d为维度,具有分段利普希茨边界,满足内部锥条件,f(x) ∈ L2(Ω)是给定的函数,∆是标准的拉普拉斯算子。算…

JVM规范中的运行时数据区

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

YOLOv9改进策略 :卷积魔改 | 变形条状卷积,魔改DCNv3二次创新

💡💡💡本文独家改进: 变形条状卷积,DCNv3改进版本,不降低精度的前提下相比较DCNv3大幅度运算速度 💡💡💡强烈推荐:先到先得,paper级创新,直接使用; 💡💡💡创新点:1)去掉DCNv3中的Mask;2)空间域上的双线性插值转改为轴上的线性插值; 💡💡💡…

QT windeployqt打包出现无法正常启动问题

QT 通过windeployqt 打包后出现的问题 原因QT构建选择的是64位的 但是windows下运行的却是32位的 步骤打开32的所在路径 一般在上一级目录会有安装好的64位的MSVC工具 运行打包即可

装饰建材商城网满足家装行业需求,改变传统装修市场

装饰建材商城网满足家装行业需求,改变传统装修市场 随着国内楼市的火爆发展,家装行业可谓是炙手可热。人们关于家装的需求也开始从过去简单的宜居,开始向多元化需求转变,如环保、健康、安全、绿色、时尚等等。加上互联网的快速发展…

电能质量测试仪的功能特点

武汉凯迪正大电能质量测试仪功能特点 1、多通道测量:4个电压通道、4个电流通道同时测量。 2、电气参数测量:可同时测量电压幅值、电流幅值、相位、频率、有功功率、无功功率、功率因数等参数; 3、可测量2-64次的电压谐波和电流谐波含量&am…

C语言:指针详解(1)

目录 一、内存和地址 1.内存 2.究竟该如何理解编址 二、指针变量和地址 1.取地址操作符(&) 2.解引用操作符(*) 3.指针变量的大小 三、指针变量类型的意义 1.指针的解引用 2.指针-整数 3.void*指针 四、const修饰指针 1.const修饰变量 2.const修饰指针变量 五…

【计算机毕业设计】企业仓储管理系统——后附源码

🎉**欢迎来到我的技术世界!**🎉 📘 博主小档案: 一名来自世界500强的资深程序媛,毕业于国内知名985高校。 🔧 技术专长: 在深度学习任务中展现出卓越的能力,包括但不限于…

如何利用在线仿真软件提高教学质量?

在教育技术迅速发展的今天,老师们面临着一个共同的挑战:如何有效地利用新兴技术提高教学质量。特别是在科学、技术、工程和数学(STEM)教育领域,实践性和互动性是学习过程中不可或缺的元素。本文将深入探讨在线仿真软件…

[大模型]ChatGLM3-6B Code Interpreter

ChatGLM3-6B Code Interpreter 请注意,本项目需要 Python 3.10 或更高版本。 环境准备 由于项目需要python 3.10或更高版本,所以我们在在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择Miniconda–>conda3–>3.10(ubu…

护眼灯值不值得买?收获好评最多的护眼灯十大品牌推荐

如今,我们可以清晰地观察到越来越多的人很早就戴上眼镜的现象。这可能是由于频繁接触电子产品,长时间的学习,或处于不良的光线环境下造成的。不论原因何在,我们都意识到创造良好的光线环境对保护视力至关重要。尽管一些人对市面上…

springboot3使用自定义注解+AOP+redis优雅实现防重复提交

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 实现思路 实现步骤 1.定义防重复提交注解 2.编写一个切面去发现该注解然后执行防重复提交逻辑 3.测试 …

Spring Cloud系列(二):Eureka Server应用

系列文章 Spring Cloud系列(一):Spirng Cloud变化 Spring Cloud系列(二):Eureka Server应用 目录 前言 注册中心对比 Nacos Zookeeper Consul 搭建服务 准备 搭建 搭建父模块 搭建Server模块 启动服务 测试 其他 前言 前面针对新版本的变化有了…

【SCI绘图】【曲线图系列1 python】绘制扫描点平滑曲线图

SCI,CCF,EI及核心期刊绘图宝典,爆款持续更新,助力科研! 本期分享: 【SCI绘图】【曲线图1 python】绘制扫描点平滑曲线图 1.环境准备 python 3 import numpy as np import pandas as pd import proplot …