關於C語言中的逗號表達式你所不知道的知識解惑

首先我們要知道在C語言中,逗號表達式的優先級是最低的 (也就是說賦值運算符 '=' 都比逗號表達式優先級高)。

例如:

int a=(2*6,4+8,55);

請問a=?

答:先計算括號內的逗號表達式的值,該逗號的值爲55,再把55賦值給a,所以a=55

 

int a=5;

a=(a=2*3,a*4),a+10;

請問a=?

很多人覺得a=34,計算方法如下:a=6,a又等於6*4=24,最後a=24+10=34;

實際上這個答案是錯誤的,因爲讀者可能犯了一個錯誤,認爲逗號表達式的值是取自最後一次計算的結果。

若回過頭看我紅色加粗標註的地方,就會發現原來a=24已經完成了計算(此時表達式變成a+10),

之後又算了一步沒用的操作。

 

逗號表達式的用途:

在for循環裏經常會用到,除了在for循環裏用到外,我們在宏定義裏也經常遇到:

#define SWAP(a,b)     a^=b,b^=a,a^=b

而傳統多行語句的寫法是do {...} while(0);

相比而言,很多時候在宏中還有用逗號表達式寫簡潔多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章