C語言補漏-逗號運算子與逗號表示式
阿新 • • 發佈:2020-10-21
1. 新名詞?
今天看到一個新名詞: 逗號表示式。 C語言就有。額,怎麼當時學習C沒見過,一頭霧水。 對我來說是新名詞,其實它早就存在了,只是我還不知道。
2. 逗號表示式
C語言提供了逗號運算子----一種特殊的運算子。 形如:
表示式1,表示式2
這裡,其將兩個表示式連線起來,類似這樣的表示式被稱為逗號表示式, 比如: a+b, 3+3。
3. 解析過程
形式: 表示式1,表示式2
先計算表示式1的結果,再計算表示式2的結果。既然整體是逗號表示式,他肯定有個結果,那麼他的結果是表示式2,與表示式1的結果無關。例如:
int a = 1; // (1) a = (a = 2 * 5, a * 4); // (2) std::cout << "a = " << a << std::endl; // (3)
首先(1)中,a=1, (2)中,(a = 2 * 5, a * 4)是一個逗號表示式,(2)整體是一個賦值表示式。(2)的計算過程:先計算 a=2*5, 再將10(2*5)賦值給a, 此時,a = 10, 最後計算表示式2 a * 4的結果,a = 10, a * 4 = 40。逗號表示式的結果為40,最終將40賦值給a,a最終等於40.
4.優先順序
逗號運算子是一種特殊的運算子,其優先順序為最低。看下面的例子:
例A
a = (a = 2 * 5, a * 4);
例B
a = 2 * 5, a * 4;
例A與例B的區別是,例A是一個賦值表示式,例子B是一個逗號表示式。
5.擴充套件
擴充套件形式: 表示式1,表示式2,表示式3......表示式X
整體計算結果為最後一個表示式X的值。
一個例子
int a = 1;
a = (a = 2 * 5, a * 4, a + 1, a + 2, a + 3);
cout << "a = " << a << endl;
按照規則,整體是一個賦值表示式,其中,=右邊的逗號表示式的最終結果為 a+3,而a = 2 * 5 = 10, 所以,賦值表示式計算結果: a = 13