1. 程式人生 > >C語言關鍵字淺析-for

C語言關鍵字淺析-for

### 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語言關鍵字淺析-do

C語言關鍵字淺析-break

C語言關鍵字淺析-continue

C語言關鍵字淺析goto