# 【知识精讲】自减和自增运算符
## Part1
在使用循环结构的时候,我们经常会需要维护一个计数器变量,每执行一次变量就让计数器增加 1。在上一章的`while`循环中,我们使用了变量`i`作为计数器变量,使用代码`i=i+1;`来完成自增运算。这段代码的意思是,取出`i`原有的值,加1之后赋给`i`作为`i`新的值。大家是不是觉得这么写很麻烦?事实上,C++ 语言提供了一种更加简单的运算符来完成这个操作,称为**自增运算符**。具体的写法是在变量后面加上两个连续的加号。我们上一章的循环中使用了这样的代码:
~~~
while(i <= 10){
sum += i;
i = i + 1;
}
~~~
改用自增运算符之后就可以变成这个样子:
~~~
while(i <= 10){
sum += i;
i++;
}
~~~
## Part2
除了自增运算符之外,还有自减运算符——写法就是把自增运算符的两个连续的加号,换成两个连续的减号。比如上面的代码,如果改成从 101010 加到 111 的话,就会变成这样:
~~~
i = 10;
while(i>0){
sum += i;
i--;
}
~~~
自增和自减运算符,除了可以像我们刚才演示的那样后置使用之外,还可以前置使用——例如`++i;`这样的写法。此外,自增运算符不仅可以在单独一句语句中使用,还可以在其他的表达式中配合使用。比如,上面的循环体:
~~~
sum += i;
i++;
~~~
就可以合并成这样一句语句:
~~~
sum+=i++;
~~~
这一句语句,与上面这两句语句的效果是相同的。
## Part3
需要说明的是,自增/自减运算符在表达式中前置使用和后置使用的效果是不同的——在接下来的课程中,我们将会实际演示这两者的差别。另外,像`sum+=i++;`这样的语句,虽然是正确的,但是在实际开发中最好**不要这么使用**——这会对代码的可读性和可维护性带来负面影响。
很多同学在使用我国某本被很多学校广泛使用的 C/C++ 编程语言教材,这本书中曾经向大家介绍了诸如`i++++i;`之类的奇奇怪怪的写法,并且大力提倡这些“奇技淫巧”。如果同学们“有幸”看过这本教材的话,那请务必**忘掉书上说的内容**。
事实上,像`i++++i;`这样的语句,是一种 C++ 标准未定义的行为,你可以认为这是错误的代码——具体地说,对于这样的代码,版本较新的 g++ 和 MSVC 编译器都会报错,无法通过编译。所以,如果有同学看过该教材,并且想要继续学习C++ 语言的话,那么请务必忘掉这些内容。
- 教材介绍
- 《编程初学入门常识》
- 什么是程序语言
- 【知识精讲】编程与编程语言
- 【选择测试】编程语言分类
- 【知识精讲】高级语言分类
- 【选择测试】编译与解释
- 【选择测试】程序员笑话-Java
- 熟悉键盘上用于编程的键位
- 【知识精讲】认识你的键盘
- 【知识精讲】中文和英文字符
- 【匹配测试】识别中英文符号
- 【选择测试】中英文符号的影响
- 【伴随编程】不要使用中文引号
- 【伴随编程】不要使用中文分号
- 【伴随编程】正确地输入符号
- 【选择测试】找出程序中的错误
- 初始工程师思维
- 【知识精讲】二进制思想
- 【选择测试】程序员笑话-凑整
- 【知识精讲】闭合的逻辑
- 【选择测试】程序员笑话-条件
- 程序员职业与生活
- 【知识精讲】程序员的发展方向
- 【知识精讲】程序员的装备
- 【知识精讲】程序员的健康
- 【选择测试】做一名健康的程序员
- 《C++程序设计》
- 前言
- 【知识精讲】编程与计算机科学
- 【知识精讲】编程与软件工程
- 【知识精讲】如何学习编程
- 你好C++
- 【知识精讲】你好,C++
- 【知识精讲】C++程序是如何开发的
- 【知识精讲】成为一名Power User
- 【伴随编程】让我们一起说你好
- 【知识精讲】你的第一个C++语言程序
- 【伴随命令】编译、运行你的程序
- 【伴随编程】将变量流式输出
- 【选择测试】变量的作用域
- 【知识精讲】变量与数据类型
- 【匹配测试】C++语言的入门概念
- 【知识精讲】在程序中学会换行
- 【选择测试】正确地换行
- 简单数学运算
- 【知识精讲】重新认识基本运算
- 【选择测试】运算符的理解
- 【伴随编程】做一下简单的运算
- 【伴随编程】a 的 n 次方
- 【知识精讲】数学函数
- 【伴随编程】让C++语言变成计算器
- 【伴随编程】计算球的体积
- 【匹配测试】数学世界知多少
- 【知识精讲】在程序中添加注释
- 【选择测试】正确地写注释
- 从伴随输入到变量地址
- 【伴随编程】 一个数字复读机器
- 【选择测试】理解标准输入输出
- 【伴随编程】一个加法计算器
- 【程序设计】A+B+C问题
- 【伴随编程】简单的I/O格式控制
- 【知识精讲】地址与取地址符
- 【伴随编程】看看我们的地址
- 习题一:面积与周长
- 【程序设计】矩形面积与周长
- 【程序设计】三角形面积与周长
- 【程序设计】圆形面积与周长
- 程序中的是与非
- 【知识精讲】是非的表示与关系运算
- 【伴随编程】验一验关系运算式
- 【选择测试】关系运算式求值
- 【知识精讲】如果的意义
- 【伴随编程】分段函数求值
- 【知识精讲】如果之后的如果
- 【伴随编程】五则运算器
- 【选择测试】分支的嵌套
- 【伴随编程】问号表达式
- 【知识精讲】是非之间的逻辑组合
- 【伴随编程】判断闰年
- 【程序设计】日期合法性
- 【知识精讲】多路顺序结构
- 【知识精讲】在程序中学会缩进
- 【选择测试】正确的缩进
- C++程序中的苦力
- 【知识精讲】使用循环结构
- 【选择测试】对比两种循环
- 【伴随编程】使用while循环
- 【填空测试】理解循环结构
- 【知识精讲】自减和自增运算符
- 【伴随编程】使用自增运算符
- 【知识精讲】for循环
- 【选择测试】for循环的使用
- 【程序设计】一大波好玩儿的程序
- 《代码能力快速提升》
- 《基础数据结构》
- 《搜索入门》
- 《动态规划基础》
- 《数论和基础数学》
- 《图和数基础》