逗號運算子實質上,就是把兩個或者多個表示式放一起,會被編譯器認為是乙個表示式。
表示式的定義:任何值或任何有效的值和運算子的組成是表示式。
以下不是表示式:
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賦值的 有三個表示式,用逗號分開,所以最終的值...