(七十)逗號運算子

2021-07-08 15:19:30 字數 1724 閱讀 8160

逗號運算子實質上,就是把兩個或者多個表示式放一起,會被編譯器認為是乙個表示式。

表示式的定義:任何值或任何有效的值和運算子的組成是表示式。

以下不是表示式:

int a , b ; 其中a,b分別是乙個變數,

我們可以int a; int b; 這樣是宣告a是int型別,b是int型別。

也可以int a, b; 這樣是宣告a和b都是int型別。

在這裡有點類似 「和」 的意思。——但記住,不是每個都可以這麼理解,特別是在輸出表示式的值的時候

以下是表示式:

又例如在for迴圈語句裡,小括號裡面的三個語句,是被分號隔起來的。

for(i=1;i<5;i++)

其中i=1、i<5和i++都是表示式。

這三個表示式,也可以用逗號運算子。

上**:

#includeint main()

cout << "迴圈已經結束" << endl;

cout << a << endl;

cout << b << endl;

system("pause");

return 0;

}

輸出:

第1遍迴圈13

第2遍迴圈24

第3遍迴圈35

迴圈已經結束46

請按任意鍵繼續. . .

問題:①從結果來看,結束迴圈是因為b不小於6,而不是a<2。

即:逗號前的判斷 未滿足 並沒有影響到判斷,逗號後的判斷 未滿足 ,迴圈結束。即a<2並沒有影響結果。

——這裡有一種猜想,是不是因為兩個表示式都不滿足後,迴圈結束。至少滿足乙個表示式,迴圈繼續進行。

然而,在測試中被否決,在另外乙個for中,第乙個表示式滿足,第二個表示式不滿足,迴圈結束。——即只有乙個表示式不滿足,但迴圈依然結束。

另外,在之前,我們分析到for語句的判斷語句,是將表示式轉為bool型別,滿足值為1,不滿足值為0,當值為0時結束判斷語句。

最後發現:

第乙個表示式是否滿足,並不影響迴圈執行;

若第二個表示式的值為false,則迴圈停止。

②因此,逗號運算子,在for迴圈判斷語句的時候,不能理解為「和」,這就涉及到,由逗號運算子連線多個表示式一起的話,這個表示式的值為什麼。

見下一部分。

逗號前後多個表示式的值(表示式的值):

假如逗號將兩個表示式連線在一起,如a<3,b<4;

那麼這個表示式的值為多少?

上**:

#includeint main()

輸出:

(a < 4, b>6) = false

(a = 3, b = 9) = 9

a = 3

b = 9

(a = 3, b = 9 , c=5 ) = 5

請按任意鍵繼續. . .

結論:

①有逗號參與的多個表示式,他們的值永遠表現的是最後乙個表示式的值。

②因此,在for迴圈語句的判斷語句中,是否執行迴圈,判斷的是最後乙個表示式的值是true還是false。

③變數名=30 這種形式的表示式,值為30

逗號運算子

在c語言中,多個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後乙個表示式的值。假設b 2,c 7,d 5,a1 b,c d 3 a2 b,c d 3 對於第一行 有三個表示式,用逗號分開,所以最終的值應該是最後乙個表示式的值,也就是d 3,為8,所以a1 8。對於第...

逗號運算子

c 語言中,逗號 也可以是運算子,稱為逗號運算子 comma operator 逗號運算子可以把兩個以上 包含兩個 的表示式連線成乙個表示式,稱為逗號表示式。其一般形式為 子表示式1,子表示式2,子表示式n 例如 a b,c b,c 逗號運算子的優先順序是所有運算子中級別最低的,通常配合 for 迴...

逗號運算子

逗號運算子是指在c語言中,多個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後乙個表示式的值。例子 int a1,a2,b 2,c 7,d 5 第1行 a1 b,c d 3 第2行 a2 b,c d 3 第3行 對於給a1賦值的 有三個表示式,用逗號分開,所以最終的值...