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

在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进行操作之后的值。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android14之智能指针的弱引用、强引用、弱指针、强指针用法区别及代码实例(二百零五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

四川古力未来科技抖音小店正规,科技创新引领行业潮流

随着互联网的迅猛发展,电商平台日益成为人们购物的主要渠道。在众多电商平台中,抖音小店以其独特的社交属性和内容营销方式,吸引了大量消费者的关注。四川古力未来科技抖音小店作为其中的佼佼者,以其正规的经营模式、丰富的产品线…

如何理解WMS仓储管理系统的建设理念

在现代企业经营中,WMS仓储管理系统的建设已成为提升竞争力的关键所在。随着科技的不断发展,越来越多的企业开始寻求实现高度自动化、信息化和网络化的生产模式。WMS仓储管理系统则成为实现这一目标的重要工具。本文将深入探讨WMS仓储管理系统解决方案的建…

7-13 日K蜡烛图

题目链接&#xff1a;7-13 日K蜡烛图 一. 题目 1. 题目 2. 输入输出格式 3. 输入输出样例 4. 限制 二、代码 1. 代码实现 #include <iostream> using namespace std;// 实心与空心 static const string str1(float Open, float Close) {float num Open - Close;if (…

竞赛升温,量子革命待发

人工智能已经吸引了全球企业巨头和政界领袖的广泛关注。同时&#xff0c;一场激烈的全球竞赛正在展开&#xff0c;目标是开发被许多专家视为下一个领域革命性技术的量子计算。 量子计算机利用量子物理学的原理&#xff0c;有潜力推动包括药物研究、股票市场分析以及数据加密在内…

[网鼎杯 2020 玄武组]SSRFMe

[网鼎杯 2020 玄武组]SSRFMe 源码 <?php function check_inner_ip($url) {$match_resultpreg_match(/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/,$url);if (!$match_result){die(url fomat error);}try{$url_parseparse_url($url);}catch(Exception $e){die(url foma…

解决grafana报错This panel requires Angular (deprecated).

背景&#xff1a;使用docker部署了prometheus,grafana,node exporter和cadvisor 然后去grafana官网下载成熟的模板导入到平台&#xff0c;发现模板上的图标全部报错This panel requires Angular (deprecated). 解决方法&#xff1a;修改grafana配置文件&#xff0c;如下&…

电脑开机提示“no bootable device”,无法进入系统

当您的Windows 10电脑开机时提示“no bootable device”,这意味着计算机无法找到一个可以启动操作系统的设备。这个问题通常与硬件连接、BIOS设置、硬盘问题、引导扇区故障或系统文件损坏等有关。以下是一系列详细的解决步骤: 检查硬件连接:关闭电脑,拔掉电源线,打开机箱检…

合并单元格的excel文件转换成json数据格式

github地址: https://github.com/CodeWang-Ay/DataProcess 类型1 需求1: 类似于数据格式: https://blog.csdn.net/qq_44072222/article/details/120884158 目标json格式 {"位置": 1, "名称": "nba球员", "国家": "美国"…

threejs 基础知识点汇总

threejs 基础知识点汇总 之前写了几篇博文&#xff0c;但是我觉得写的不好&#xff0c;我今天再补充一篇还不好的&#xff0c;把基础知识点汇总一下&#xff0c;不写运行的代码了&#xff0c;只写关键代码&#xff0c;但是看了之前我写的那几篇&#xff0c;看这篇的话问题其实不…

PTA(题目集三 题目 代码 C++ 注解)

目录 题目一&#xff1a; 代码&#xff1a; 题目二&#xff1a; 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目五&#xff1a; 代码&#xff1a; 题目六&#xff1a; 代码&#xff1a; 题目七&#xff1a; 代码…

如何利用AI绘制美观的地学图片摘要--提供各类矢量的地表地形和植被元素

我们经常在高级期刊的文章里面见到类似以下的图片&#xff08;Anatomy of a Glacier - Glacier Bay National Park & Preserve (U.S. National Park Service)&#xff09; 这样的表达对于研究结果非常生动形象。下面的这个网站提供了很多类似的元素&#xff0c;可以有助于我…

MySQL8.0.36-社区版:Windows和Linux上的应用部署(1)

简介&#xff1a; 本章不做过多的介绍了&#xff0c;你可以去官方的文章查看到更详细&#xff0c;更专业的介绍&#xff0c;我这里直接讲解如何进行安装 MySQL :: MySQL Documentationhttps://dev.mysql.com/doc/ Windows部署 这里我使用的是win10专业版系统 MySQL :: Dev…

Java项目——瑞吉外卖笔记

hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行!&#x1f4aa;&#x1f4aa;&#x1f4aa; 目前博客主要更新Java系列、数据库、项目案例、计算机基础等知识点。感谢你的阅读和…

使用MQTT.fx接入新版ONENet(24.4.8)

新版ONENet使用MQTT.fx 模拟接入 目录 新版ONENet使用MQTT.fx 模拟接入开始前的准备创建产品设备获取关键参数 计算签名使用MQTT.fx连接服务器数据流准备与上传数据流准备数据发送与接收 开始前的准备 创建产品 设备下载Token签名工具生成签名 创建产品设备 根据以下内容填写…

算法四十天-删除排序链表中的重复元素

删除排序链表中的重复元素 题目要求 解题思路 一次遍历 由于给定的链表是排好序的&#xff0c;因此重复的元素在链表中的出现的位置是连续的&#xff0c;因此我们只需要对链表进行一次遍历&#xff0c;就可以删除重复的元素。 具体地&#xff0c;我们从指针cur指向链表的头节…

C++类与对象上(个人笔记)

类与对象 1.面向过程和面向对象初步认识2.类的定义3.类的访问限定符及封装3.1 访问限定符 4.封装5.类的实例化6.类对象6.1类对象的内存计算6.2内存对齐规则&#xff08;回顾&#xff09; 7.this指针7.1 this指针的特性 1.面向过程和面向对象初步认识 C语言是面向过程的&#x…

Java考题讲解一共5套,也可以在线刷题

【拯救者】Java刷题训练(二级专升本期末自考必备) &#x1f4d9;巩固基础 &#x1f4dc;知道考点 狠狠提分⬆️ (二级专升本期末自考必备) 大纲 一共5套题,每套可以先看视频,然后刷题. 末尾汇总了5套选择 填空 判断题, 优点: 可以查看解析和错题

L2-021 点赞狂魔

输出标签出现次数平均值最小的那个是指标签出现次数K。 模拟。 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c,ss; struct s {int x,z;string y; }q[n]; bool cmp(s a1,s a2) {if(a1.x!a2.x)return a1.x>a2.x;e…

C语言进阶课程学习记录-第26课 - 指针的本质分析

C语言进阶课程学习记录-第26课 - 指针的本质分析 *号实验-指针的大小实验-传址交换数值实验-const与指针小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 *号 实验-指针的大小 #include <stdio.h…