C語言關鍵字淺析-for
阿新 • • 發佈:2018-11-23
### C語言關鍵字淺析系列 ###
### ISO/ANSI C 關鍵字 ###
for關鍵字似乎並不能從其字面本身看出其含義
但這是個最常見的關鍵字,而且在迴圈結構的使用中也基本是最多的
同while一樣,for迴圈是一個入口條件迴圈,並且在某些方面比while顯得更簡潔幹練
for的作用是:
表達for迴圈結構。
1、for的三個動作
注意,for迴圈後的括號內不是三個引數,而是三個動作
嚴格來講它們分別叫做初始化,測試,更新,比如這條語句:for (i = 0; i < 10; i++)/* 迴圈體 */;
i = 0就是初始化過程,測試條件指的是初始化完成後是否有執行迴圈語句的條件成立,即i < 10,i++是執行完一遍後的更新操作
由於括號中的是三個動作,而且初始化操作只做一次,所以有時候初始化操作處不一定都是賦值語句:
int index = 0;
for (printf("Begin scanning\n");index != 1024;) /* 此處初始化操作其實是一個輸出 */
{
getFromData(&index); /* 對index賦值 */
}
2、for的三個動作的預設
在一些迴圈中,每趟迴圈完畢不一定非要有某個更新操作(如上),所以最後一個動作預設的時候表示沒有更新操作
當然這也依賴於for的預設機制,按道理這三個動作其實都可以預設掉而且不會認為是錯誤的:
/* 全員預設的for,效果是死迴圈,但看上去怪彆扭的 */
for (;;){}
/* 這樣寫死迴圈好一些沒 */
while (1){}
/* 別看有些for迴圈表面上風風光光的,其實是個死迴圈,下面這個程式會一直加,加到爆炸 */
for (i = 0;;i++){}
/* 和上面老兄一個死樣兒 */
i = 0;
while(1){i++;}
注意,第一個動作預設可以理解,第三個動作預設可以理解,第二個動作預設為什麼就死迴圈了?
因為當系統發現for的第二個動作預設時,會認為是“真”,所以在一直條件為真的情況下就沒有退出的情況了,這樣的裝置建議拔電源
3、逗號運算子
有時候for迴圈的初始化和更新操作可能不止針對一個變數,但一條語句只能修改一個變數,
這就催生了逗號運算子給for迴圈錦上添花的一段佳話
逗號運算子擴充套件了for迴圈的靈活性,使其在初始化和更新時能多做點事:
for (i = 0, j = 0; i < 10; i++, j += 2)
{
/* 雖然一次動作的子動作多了,但順序還是一樣的 */
}
——參考《C Primer Plus第五版》
相關文章:
C語言關鍵字淺析-while
C語言關鍵字淺析goto