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

posted @ 2020-10-21 16:07  mohist  阅读(722)  评论(0编辑  收藏  举报