1. 程式人生 > 實用技巧 >C語言補漏-逗號運算子與逗號表示式

C語言補漏-逗號運算子與逗號表示式

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