C語言筆記 逗號表示式的一點陷阱

2021-09-26 23:16:05 字數 645 閱讀 6640

有一道c語言題目是這樣的:

若a是int型變數,則「(a=45,a2),a+6」表示式的值為( )。

解釋:我填的是46,答案是26。為什麼,首先a=20這個沒錯,但把a=a2聯絡起來就錯了,a2和a的值沒半毛錢關係,a2=202=40只是乙個在乙個不知道記憶體位址的某個臨時儲存區存放的資料,20是乙個程式設計師可以知道記憶體位址的乙個值,接著涉及到c語言的逗號表示式了,我們進一步用逗號表示式分析。

(a=45,a2),a+6

1、(a=45,a2),a+6 整個表示式是乙個逗號表示式

2、用括號括起來的先計算前一部分逗號表示式,從左至右計算,a被賦值為20,然後a2只是這個小的逗號表示式(a=45,a2)的結果,不影響a的值,書上說最後乙個表示式為整個逗號表示式的值

3、接著計算括號外的a+6,a=20+6=26,又因為a+6為整個大的逗號表示式(a=45,a*2),a+6的最後乙個表示式,所以題目問整個逗號表示式的值,即大的逗號表示式的最後乙個表示式的值,即a+6的值,為26

#include

intmain()

或者直接輸出:

#include

intmain()

C語言 逗號表示式

c語言提供一種特殊的運算子 逗號運算子。用它將兩個表示式連線起來。如 3 5,6 8 稱為逗號表示式,又稱為 順序求值運算子 逗號表示式的一般形式為 表示式1,表示式2 逗號表示式的求解過程是 先求解表示式1,再求解表示式2。整個逗號表示式的值是表示式2的值。例如,上面的逗號表示式 3 5,6 8 ...

C語言逗號表示式

c語言提供一種特殊的運算子,逗號運算子,優先級別最低,它將兩式聯接起來,如 3 5,6 8 稱為逗號表示式,其求解過程先表示式1,後表示式2,整個表示式值是表示式2的值,如 3 5,6 8 的值是14,a 3 5,a 4 的值是60,原因在於賦值運算優先順序高於逗號表示式。逗號表示式的要領 1.從左...

C語言逗號表示式

c語言提供一種特殊的運算子,逗號運算子,優先級別最低,它將兩式聯接起來,如 3 5,6 8 稱為逗號表示式,其求解過程先表示式1,後表示式2,整個表示式值是表示式2的值,如 3 5,6 8 的值是14,a 3 5,a 4 的值是60,原因在於賦值運算優先順序高於逗號表示式。逗號表示式的要領 1.從左...