在C中用括号分配两个值

4 c syntax

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

p = (1, 2.1);
Run Code Online (Sandbox Code Playgroud)

我们了解什么p

Kon*_*lph 18

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

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

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

  • @Graeme,我打赌你有时会发现`for(i = 0; i <n; i ++,j--)......;`有用 (9认同)
  • 您可以在C++中重载运算符(但显然不是C),Boost使用它来实现列表初始化,例如`list_type mylist = 1,2,3,4,5`. (4认同)
  • 在编写C代码的二十年中,我还没有为逗号运算符找到一个非常有用的非hackish用法. (3认同)
  • 逗号运算符几乎是一个hackish运算符的定义 - 攻击只有一个允许的2个东西. (3认同)
  • Graeme,如果有很多hackish,你为什么要非hackish使用? (2认同)