【C++语言】彻底搞懂++i和i++

6 篇文章 1 订阅
订阅专栏

目录

 

1 概念

2 前缀递增示例

2.1 示例代码

2.2 解题思路

3 后缀递增示例

3.1 示例代码

3.2 解题思路

4 混合表达式示例

4.1 示例代码

4.2 解题思路


1 概念

++是单目运算符:++i是前缀递增,先参与表达式运算,然后再自增;i++是后缀递增,表示先进行递增,然后再参与表达式运算。

2 前缀递增示例

2.1 示例代码

#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
	int a = 10;
	int b = 0;
    b = a++;
	cout << "b = " << b << endl;
	cout << "a = " << a << endl;

	system("pause");
	return 0;
}

2.2 解题思路

解题过程中,为了方便理解,分别用两个盒子来表示变量a和变量b;

第一步:初始时,a的值为10,b的值为0

第二步:b = a++; 此时的a++为后缀递增,因此a++先参与表达式的运算,也就是把a的值赋给b,此时b的值也就是10;

第三步:然后再进行自增运算a = a + 1 = 10 + 1 = 11;

第四步:

      输出结果:

            b = 10 

            a = 11

3 后缀递增示例

3.1 示例代码

#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
	int a = 10;
	int b = 0;
    b = ++a;
	cout << "b = " << b << endl;
	cout << "a = " << a << endl;

	system("pause");
	return 0;
}

3.2 解题思路

解题过程中,为了方便理解,分别用两个盒子来表示变量a和变量b;

第一步:初始时,a的值为10,b的值为0

第二步:b = ++a; 此时的++a为前缀递增,因此++a先进行自增,a = a + 1 = 10 + 1 = 11

 

第三步:然后再把a的值赋给b

 

第四步:

      输出结果:

            b = 10 

            a = 11

4 混合表达式示例

4.1 示例代码

#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
	int a = 10;
    int b = 5;
	int c = 0;
    c = a++ + b++ + ++a + ++a + ++b;
	cout << "b = " << b << endl;
	cout << "a = " << a << endl;
    cout << "c = " << c << endl;

	system("pause");
	return 0;
}

4.2 解题思路

解题过程中,为了方便理解,分别用三个盒子来表示变量a,变量b和变量c;

第一步:初始时,a的值为10,b的值为5,c的值为0

第二步:c = a++ + b++ + ++a + ++a + ++b; 表达式中有三个操作符++操作符,+操作符和=操作符。其中,++操作符优先级最高,其次+操作符,最后是=操作符。

再根据同等优先级的操作数,自左向右运算的规则,一步一步拆解表达式。先计算优先级高的++操作符:

(1)先计算最左边的a++

        由于是后缀递增,先参加表达式计算,再进行自增;表达式拆解为:

c = a + b++ + ++a + ++a + ++b;
a = a + 1;

                此时a,b,c盒子的值保持不变。

(2)再计算b++

          由于是后缀递增,先参加表达式计算,再进行自增;表达式拆解为:

c = a + b + ++a + ++a + ++b;
a = a + 1;
b = b + 1;

                  此时a,b,c盒子的值保持不变。

(3) 计算接下来的++a

          由于是前缀递增,先进行自增,a = a + 1 = 10 + 1 = 11,再参与表达式计算。此时a盒子的值发生了变化

 

          表达式变为:

c = a + b + a + ++a + ++b;
a = a + 1;
b = b + 1;

(4)计算接下来的++a

         由于是前缀递增,先进行自增,a = a + 1 = 11 + 1 = 12,再参与表达式计算。此时a盒子的值发生了变化

 

         表达式变为:

c = a + b + a + a + ++b;
a = a + 1;
b = b + 1;

(5)计算后一个++b

         由于是前缀递增,先进行自增,b = b + 1 = 5 + 1 = 6,再参与表达式计算。此时b盒子的值发生了变化

 

         表达式变为:

c = a + b + a + a + b;
a = a + 1;
b = b + 1;

第三步:接下来计算+操作符,此时a的值为12,b的值为6,则a + b + a + a + b = 12 + 6 + 12 + 12 + 6 = 48; 

表达式变为:

c = 48;
a = a + 1;
b = b + 1;

第四步:最后进行优先级最低的=操作符运算。将48赋值给c

 

此时表达式剩下:

a = a + 1;
b = b + 1;

 

第五步:执行a = a + 1的自增运算,a = 12 + 1 = 13;

第六步:执行b = b + 1的自增运算,b = 6 + 1 = 7

 

第七步:

      输出结果:

            b = 7

            a = 13

           c = 48

 

2024华为OD机试真题指南宝典—持续更新(JAVA&Python&C++&JS)【彻底搞懂算法和数据结构—算法之翼】
一键难忘的博客
12-24 2万+
2024华为OD机试指南宝典—持续更新(JAVA&Python&C++&JS)【彻底搞懂算法和数据结构—算法之翼】 OD全称(Outsourcing Dispacth)模式,目前华为和德科联合招聘的简称。目前华为社招大多数是OD招聘,17级以下都为OD模式,OD模式也是华为提出的一种新的用工形式,定级是13-17级,属于华为储备人才,每年都会从OD项目挑优秀员工转为正编。--考来的,描述的很准确。
C语言自增运算符(++i)、自减运算符(--i)详解
2301_81674797的博客
01-09 1090
自增运算符的作用是使变量的值加一,自减运算符的作用是使变量的值减一。在自增运算符的使用过程中,这其中有两种书写方法,即++i与i++两种,这两者也代表了不同的含义。 ++i的含义是在使用i这个变量之前,先执行i=i+1,然后再使用加一之后的i值; i++的含义是先使用i这个变量的值,再执行i=i+1,这里使用的i值是自增之前的。
c++】i++++i 详解
热门推荐
gogo小Sa的专栏
05-14 4万+
c++】i++++i 详解 参考:前++(--)和后++(--)的区别  https://blog.csdn.net/u011321104/article/details/9280879《c++ Primer中文版》Stanley B Lippman  等著 1.小引    递增 ++ 和递减-- 操作符为对象加 1或减 1 操作提供了方便简短的表示它们最一般的用法是对索引、迭代器或指向一个集...
i++++i
qq_61739754的博客
07-03 393
++”是一个复合,相当于给变量进行了加一这样的操作。i++++i就相当于i=i+1.相信这个大家也很容易理解,简单说就是进行了一个小小的简化。
C++中的++i 与 i++详解
sinat_31608641的博客
10-30 8271
一、区别 i++++i 的主要区别有两个:1、 i++ 返回原来的值,++i 返回加1后的值。2、 i++ 不能作为左值,而++i 可以。 二、原理 毫无疑问大家都知道第一点,我们重点说下第二点。首先解释下什么是左值(以下两段引用自中文维基百科『右值引用』词条)。 左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。 一般来说,左值是可以放到赋值符号左边的变量。但是, 能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对
C++中的i++++i你真的理解吗?
baidu_41191295的博客
12-08 1万+
本篇文章主要讲解C++中的i++++i的运算规则,原本,我以为自己已经掌握了这个知识点,但是,在接触了类似(i++)+(++i)+(i++)的非规范运算时,却卡了很长时间,下面我就来着重讲解这个"事故"。 一.i++++i的区别 1.i++ i++的意思是先赋值再自增,通俗讲就是计算i++,先计算i,计算结束后i自增1。注意,自增的i不参与开始计算。在进行下一步计算时,自增的i为最新的i。 通过一个示例大家就能明白了。 int main(){ int i=0; int j=i++; cout&lt
C/C++语言 ++i 与 i++ 详解
Lianj.Qin
05-04 4450
++i 与 i++ 详解
LeetCode刷题题解答案(c++).pdf 彻底搞懂了编程算法题,成功拿到了大厂offer!
最新发布
07-20
本文档旨在提供一系列针对LeetCode算法题目的详尽解答,重点在于使用C++语言实现。文档包含了多个章节,覆盖了不同难度级别的题目,从基础到进阶,旨在帮助读者深入理解并掌握算法的核心思想与实践技巧。 #### 核心...
C++微服务RPC框架,一文带你彻底搞懂 RPC
Linuxhus的博客
09-02 9735
RPC(Remote Procedure Call),是一个大家既熟悉又陌生的词,只要涉及到通信,必然需要某种网络协议。我们很可能用过HTTP,那么RPC又和HTTP有什么区别呢?RPC还有什么特点,常见的选型有哪些? 文章相关视频讲解: RPC和微服务Thrift的架构原理 C++架构师学习地址:C/C++Linux服务器开发高级架构师/Linux后台架构师 1. RPC是什么 RPC可以分为两部分:用户调用接口 + 具体网络协议。前者为开发者需要关心的,后者由框架来实现。 举个例子,.
​C&C++——C函数与C++函数相互调用问题​
C语言C++学习俱乐部:765860056
01-07 2366
目录 序 嗨,这里是狐狸~~ C&C++相互调用 下面摘录一篇文章关于extern "C"的说明; extern "C"的惯用法 C 函数中调用 C++函数 举例: Linux C调用C++库 C++和C语言函数相互调用 1.引言 2.从标准头文件说起 3.深层揭密extern "C" 4.extern "C"的惯用法 总结 序 我爱你,你对我来说,就是早晨的面包。 嗨,这里是狐狸~~ 今天来给大家继续分享C/C++的学习心得,内容很多,知识点很多,耐心观看。..
C/C++常用关键字详解
dvlinker的技术专栏
08-03 9771
本文详细讲述了一些常用的或者有特殊用途的C/C++关键字。
C++中的i++++i
Summit的专栏
10-29 1152
C++中的i++++iC++中的++i与i++主要有两个区别: 1. i++返回的是原来的值,++i返回的是i+1后的值 2. i++不能作为左值,而++i可以作为左值 第一条比较容易理解,我们重点来看一下第二条,为什么i++不能作为左值,而++i可以。 看了它们各自的实现其实也就一目了然:// 前缀形式: int& int::operator++() //这里返回的是一个引用形式,就是说
c++中的i++++i解析
qq_34217177的博客
04-21 2390
对于c++的初学者而言,学习i++++i在例子中似乎没有什么差别,我们在正常的代码运行中,两者的功能似乎没有什么不同,那么本篇文章将有部分我对该现象的理解。 1、两者的概念区别 i++:一般是指先操作,再进行++运算++i:一般是指先进行++运算,在去操作。 举个例子: #1 int i=0; i++; cout<<i; #2 int j=0; ++j; cout<<j; 输出结果: 1 1 从这里我们可以看出,单纯的把操作和计算分开我们无法准确的分辨出到底两者的区别在
c/c++基础 自增自减运算符 大白讲解i++/i--/++i/--i
宇宙超粒终端控制中心的博客
01-06 1496
后置运算符:i++表示在使用x之后,再使x的值加1,即i=i+1; 前置运算符:++i表示在使用x之前,先使x的值加1,即i=i+1. 也就是说,他们一个是先用再+1,一个是先+1再用 这就像一盘菜的两个原料一样。“花生油炒西红柿” 如果不炒,只是将花生油和西红柿掺起来,那么,无论是先把西红柿放在碗里再放花生油还是先把花生油放到锅里再放西红柿,结果都是一样的:生西红柿泡在了生花生油里。 但是,如果再使用一个锅来炒它们。那么,先放西红柿还是先放花生油就会产生不一样的菜的味道。 在代码中,这个“锅”是a.
C语言常见问题——++i与i++详解
易水卷长空的博客
11-17 3万+
目录 一、++i与i++ 1.引例 2.(i++)+(i++)+(i++)与(++i)+(++i)+(++i) 3.总结 二、函数中的++ 1.printf中的++ 2.++i/i++作为函数的参数 3.总结 一、++i与i++ 1.引例 对于如下程序,其输出结果是什么 #include <stdio.h> int main() { int i=1,a=0,b=0; a=i++; b=++i; printf("i=%d,a=%d,b.
c++中i++++i
qq_43900762的博客
02-23 404
1
C语言 ++i和i++
kmblack1的专栏
10-30 1666
今天范了个很小的错误,导致从队列中获取的值不正确,排查了很长时间才找到错误原因. 为吸取教训,现记录如下: 错误的代码 item = arg-&amp;amp;amp;amp;amp;amp;gt;queue.queues[++arg-&amp;amp;amp;amp;amp;amp;gt;queue.tail]; 平常写for(int i =0; i &amp;amp;amp;amp;amp;amp;lt; 100;++i)习惯了,所以获取队列值时也顺手写成++arg-&
C语言 - i++++i
Way621的博客
11-01 2765
最近写代码遇到了一个问题就是关于++i 以及 i++的,今天记录一下 ++i:i 先+1 再使用 i++: 先使用原值再+1 我遇到的问题是for循环中++i 以及 i++,这就是涉及到for循环的执行顺序了,我们现在代码中的结果! 结果是一样的!! 其实这就涉及到for循环的执行顺序了 for(表达式1;表达式2;表达式3) { 循环执行体; } 先执行表达式1,表达式2,循环执行体,再表达式3。所以这里得到的结果就是一样的。 但是如果直接打印的话,就是不一样的。 好了就这样吧! 好好学习基础,基
c++中i++++i区别
wocan23的专栏
09-26 1451
++i的效率高些,++i在运算过程中不产生临时对象,返回的就是i,是个左值,类似++i=1这样的表达式是合法的,而i++运算的过程中会产生临时对象,返回的是零时对象的值,是个右值,像i++=1这样的表达式是非法的 对于内置类型,单独的i++++i语句,现在的编译器基本上都会优化成++i,所以就没什么区别了 源代码 void test1(){ int i = 0; cout...
Java语言入门:从起源到C++的继承
"Java学习指南,适合初学者,详细介绍了Java的起源、发展和重要性,强调了Java与C++的关联以及编程语言革新的驱动力。" 在深入学习Java之前,了解其历史和背景至关重要。Java语言是在适应不断变化的技术环境和提升...
写文章

热门文章

  • apache-maven-3.6.0的安装配置 17198
  • 【C++语言】读取XML文件 14829
  • 【C++语言】彻底搞懂++i和i++ 8555
  • Ideal 报错之 Class ** is never used 解决办法 6814
  • IoT开发——WIFI模块ESP8266 RTOS SDK V3.0.0环境搭建 5482

分类专栏

  • docker 1篇
  • Windows开发 13篇
  • 【计算机语言】
  • 【C++】 6篇
  • 【Java】 8篇
  • 前端开发 2篇
  • 树莓派开发 1篇
  • 数据库 2篇
  • IoT开发 3篇
  • TouchGFX 1篇

最新评论

  • 【C++语言】彻底搞懂++i和i++

    Dugan.D.C: 要不要看看自己写了啥? 前后矛盾还是我语文不好?这为啥是百度前几的文章?诲人不倦嘛 1 概念中 "i++是后缀递增,表示先进行递增,然后再参与表达式运算。" 2.2中 "此时的a++为后缀递增,因此a++先参与表达式的运算,也就是把a的值赋给b,此时b的值也就是10;"

  • 【C++语言】cout输出string的问题

    八羊开泰: 成功解决问题,谢谢

  • 【C++语言】彻底搞懂++i和i++

    Jessie花木兰: 应该是错了 应该是11 11

  • windows编程学习——多媒体时钟

    秋风吹散马蹄声: 运行这段代码有报错。timeSetEvent函数第三个参数报错: "void (__stdcall *)(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)" 类型的实参与 "LPTIMECALLBACK" 类型的形参不兼容

  • 【C++语言】彻底搞懂++i和i++

    炼丹小白师: 3.2结果是不是错了表情包

最新文章

  • 小程序promise化
  • docker 安装mysql
  • pom 设置 Maven 的JDK编译版本
2022年1篇
2021年4篇
2019年6篇
2018年5篇
2017年5篇
2016年16篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王网站排名优化对企业的好处无锡优化网站在哪开封官网网站优化代办义马网站优化网站做优化憾沟云速捷高端越秀网站优化推广怎么做最好电商网站url优化宁波网站优化公司莆田网站优化和推广秦皇岛网站优化推广价格求推荐好的网站优化方法奉节网站优化哪家好宁夏营销型网站优化如何建设好优化的网站哈尔滨网站百度快照优化网站优化售后威海响应式网站优化公司优化网站的内部链接和外部链接关于网站关键词优化免费的网站优化哪个好商丘优化网站排名收费情况教育行业网站优化需要多少钱新余网站综合优化金昌正规网站优化深圳罗湖企业网站优化如东县网站优化方案网站排名优化 必宙l思方法湘西标准营销型网站优化前山镇网站seo优化上海网站seo优化服务香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化