while()語句括號中是一個邏輯表達式,用以判斷while循環是否須要繼續執行。能夠是賦值語句。函數
while循環的通常格式爲:spa
while(expr)指針
{code
;//bodyblog
}ci
其中用來判斷循環條件的expr能夠是任意表達式。當其是賦值語句的時候,含義爲:先執行賦值語句,而後對左值進行判斷。若是左值爲0則expr爲假,while退出;不然expr爲真,while繼續循環。字符串
不過直接用賦值語句作expr時,編譯器可能爲認爲賦值操做符=是等於判斷符==的誤寫,這時編譯器可能會報一個警告(warning),編譯器是否報警,及報警告仍是錯誤(error)取決於編譯器設置。爲避免這種狀況,能夠用while((var = expr))的形式,告知編譯器就是要先賦值再判斷,編譯器就不會理會了。get
下面是舉一個例子用來輔助說明。編譯器
函數功能,將參數字符串中的全部值按照ascii碼進行累加,獲取校驗和,溢出後只取低字節值。it
char sum(char* p) { char c; char sum = 0; while((c = *p ++))//讀取字符串中的字符,直到字符串結尾。 這裏用的就是一個賦值的方式。先把*p賦值給c,而後執行指針移位,再判斷c的值,若是c值爲0,表明字符串結束,退出循環。 { sum+=c;//累加值,不考慮溢出。 } return c;//返回校驗和 }