while (condition)
statement
語句重複執行。評估每個執行(迭代)條件之前。如果它是假的,while循環結束並繼續執行。
在這種情況下,聲明爲空。語句可以是以分號(;)結尾的單行代碼或用大括號({,})括起來的塊代碼代碼
因此,我們會持續評估條件,直到它產生錯誤。爲了理解發生了什麼,我們需要檢查逗號運算符的工作方式。 (注意,雖然逗號作爲一個字符可以用在C中的地方 - 我可以想到函數聲明,定義和調用 - 在這種情況下,逗號字符是條件的一部分,因此它作爲一個操作符。)
expression1 , expression2
逗號運算符使表達式1先被評估,然後被表達式2,然後返回表達式2的值。我們將評估兩個操作數(i ++,i < = 8),並在右操作數解析爲真時繼續操作。
雖然通常我們使用條件來控制循環的執行,但在這種情況下,條件可能會有其他影響。在我們的情況下,變量i受到每個條件評估的影響。它增加了一個。
我們的例子只有條件操作數的順序不同,因此操作數結果真的控制了循環的執行。
我們先來看第二個例子。在這種情況下,我們有條件「我++,我< = 8」。這意味着每次評估我們首先增加i,然後檢查它是否小於或等於8.因此,在第一次評估條件時,我們將i從0增加到1並得出結論:1 < = 8,所以循環繼續。這樣構建的循環只能在我變成9時破壞,即。在第9次迭代。
現在至於第一個例子,條件是「i < = 8,++ i」。由於比較沒有副作用,因此我們可以按任意順序執行任意數量的比較,如果這是我們所做的唯一事情,那就是說,如果我們沒有按照比較結果的方式或順序執行任何其他操作,那些比較將毫無用處。與我們的情況一樣,我們評估i < = 8,其結果爲真或假,但我們沒有使用該值,只是繼續評估正確的操作數。所以我們的情況實際上等於「i ++」。
這是後增量的一元運算符。它返回我的價值,然後只增加一個。 (所有的保證是這個順序,當我得到提高時,實際上是一個複雜的問題,並不總是在標準問題上決定的,除非我錯了)。所以會發生什麼是我們首先檢查我是否是真的,然後,無論如何,我們增加一個,然後打破循環或繼續。
在C中沒有真或假的值,沒有布爾類型。如果整數具有非零值,則認爲它們爲真。
因此,第一次評估「i ++」時,我們得到0,這是錯誤的。這意味着循環被打破,甚至沒有一次迭代。然而,「i ++」的評估使它增加了一個,所以當我們完成while循環時,我已經是1.