逗号表達式

逗号表達式

特殊的運算符
逗号表達式,是c語言中的逗号運算符,優先級别最低,它将兩個及其以上的式子聯接起來,從左往右逐個計算表達式,整個表達式的值為最後一個表達式的值。如:(3+5,6+8)稱為逗号表達式,其求解過程先表達式1,後表達式2,整個表達式值是表達式2的值,如:(3+5,6+8)的值是14;a=(a=3*5,a*4)的值是60,其中(a=3*5,a*4)的值是60, a的值在逗号表達式裡一直是15,最後被逗号表達式賦值為60,a的值最終為60。[1]
  • 中文名:逗号表達式
  • 外文名:
  • 别名:
  • 表達式:
  • 提出者:
  • 适用領域:
  • 出處:C語言
  • 類别:一種特殊的運算符
  • 優先級别:最低

表達式說明

(表達式1,表達式2,表達式3,……,表達式n)

逗号表達式的要領:

(1)逗号表達式的運算過程為:從左往右逐個計算表達式。

(2)逗号表達式作為一個整體,它的值為最後一個表達式(也即表達式n)的值。

(3)逗号運算符的優先級别在所有運算符中最低。

例題

例題1:逗号表達式本身不難,常常與賦值運算符一起考,考查學生對這兩個知識點的理解和考生觀察是否細心。如下題:

輸出結果是:

main()

{

int x,y,z;

x=1;

y=1;

z=x++,y++,++y;

printf("%d,%d,%dn",x,y,z);

}

例題

[A]2,3,3 [B]2,3,2 [C]2,3,1 [D]1,1,1

解析

x和y的值經過自增以後分别為2和3,D可以排除。剩下3個選項選擇什麼呢?

如果是(x++,y++,++y)實際上可以看成(1,1,3)整個逗号表達式的值應該是3,那麼選A。

如果是(x++,++y,y++)實際上可以看成(1,2,2)整個逗号表達式的值應該是2,那麼選B。

但這是錯的,這兒還有賦值運算符。賦值運算符的優先級是14,而逗号表達式的優先級是15,也就是說上面的表達式中應該等價于這樣的結合:(z=x++),y++,++y;如果這樣寫的話,則答案很清晰,為:2,3,1

正确答案選C。

PS:據我統計,這種類型的題目錯誤率超過70%.

相關的題

例題1:(a = 3,b = 5,b+ = a,c = b* 5),求逗号表達式的值?

答案:40。前兩個表達式隻是賦值,從第三個開始計算,b+=a,即b=b+a,即b=5+3,b=8,求最後一個表達式,c=b*5=8*5=40.因為逗号表達式的值是最後一個表達式的值,所以整個逗号表達式的值為40,其他各變量最後的值依次為:a=3,b=8,c=40

例題2:若已定義x和y為double類型,則表達式:x=1,y=x+3/2的值是

A) 1  B) 2 C) 2.0 D) 2.5

分析:該表達式是一個逗号表達式,所以先運算x=1,結果變量x中的值為1.0,然後運算y=x+3/2,其結果是變量y中的值為2.0(這個運算過程可參閱本專題的“整數除法的注意事項”——整數相除,舍入法取整數部分),注意此時表達式y=x+3/2的值即等于變量y的值為2.0。最後,整個逗号表達式的值應該等于最後一個表達式的值2.0,所以,正确答案是C)。

注:該題曾在1998年4月和2000年9月的二級C考試中兩次出現過。

例題3:若t為double類型,表達式t=1,t+5,t++的值是

A) 1 B) 6.0 C) 2.0 D) 1.0

分析:D 該題考察的是關于求逗号表達式值的問題,逗号表達式的值為最後一個表達式的值。而t++是先用再自增,所以表達式的值為1.0。

例如運行以下程序:

int a,b;

b=( a=1,a+1,a++);

printf("%d,%dn",a,b);

輸出打印:

2,1

注:這是1998年4月二級C考試中的一道選擇題。

例題4:有如下函數調用語句

func(rec1,rec2+rec3,(rec4,rec5));

該函數調用語句中,含有的實參個數是

A)3  B)4 C)5 D)有語法錯誤

分析:A語言規定,函數調用時實參與實參之間是用逗号隔開的,所以,本題的函數調用語句中包含3個實參,其中第一個實參是rec1,第二個實參是rec2+rec3,第三個實參是(rec4,rec5),這裡的第三個實參就是一個逗号表達式,根據逗号表達式的運算規則,第三個實參的值應該等于rec5的值。

注:這是2000年9月二級C考試中的一道選擇題。

例題5:有如下函數調用語句

fun(a+b,(x,y),fun(n+k,d,(a,b)));

在此函數調用語句中實參的個數是

A)3  B)4 C)5 D)6

正确答案應該是A)。

注:這是1997年9月二級C考試中的一道選擇題。

上一篇:泡利不相容原理

下一篇:美拉德反應

相關詞條

相關搜索

其它詞條