# 【知識精講】自減和自增運算符
## 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循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》