在C中用括号分配两个值

C中的这段代码做了什么:

p = (1, 2.1); 

我们对p什么了解?

C中的逗号运算符是一个序列点 ,这意味着用逗号分隔的表达式从左到右执行。 整个表达式的值是最右边的表达式的值,在你的情况2.1 ,它被赋值给变量p

由于示例中的表达式没有副作用,因此在此处使用逗号分隔符毫无意义。

另一方面,括号是重要的,因为赋值运算符( = )比逗号运算符(它具有更高的优先级)更强,并且将没有括号的逗号运算符之前进行求值。 结果将是p == 1

这是一个错误。 逗号运算符类似于;。 它做一个,然后做另一个。 所以(1,2.1)评估为2.1

p将是2.1(或2,如果p是一个int并且需要被截断…)

将从左到右评估所有逗号分隔表达式,并返回最右侧表达式的值。

所以p会2.1。