C 括号表达式的赋值

C 括号表达式的赋值,c,expression,C,Expression,考虑以下代码段: int a, b, c; a = (b = 3, c = 4, 5, 6); 结果是,在执行这些行之后,b的值为3,c的值为4。到目前为止没有什么意外。但a的值为6。为什么呢 此外,这是否有用?因为,运算符会丢弃左侧的所有操作数,而由于6是最右侧的操作数,因此它是唯一未被丢弃的操作数 这来自§6.5.17 n1570草案 逗号运算符的左操作数作为空表达式计算;有一个 其求值与右操作数求值之间的序列点。然后右转 计算操作数;结果有其类型和值 如语法所示,本款中所述的逗号运算符不

考虑以下代码段:

int a, b, c;
a = (b = 3, c = 4, 5, 6);
结果是,在执行这些行之后,b的值为3,c的值为4。到目前为止没有什么意外。但a的值为6。为什么呢

此外,这是否有用?

因为,运算符会丢弃左侧的所有操作数,而由于6是最右侧的操作数,因此它是唯一未被丢弃的操作数

这来自§6.5.17 n1570草案

逗号运算符的左操作数作为空表达式计算;有一个 其求值与右操作数求值之间的序列点。然后右转 计算操作数;结果有其类型和值

如语法所示,本款中所述的逗号运算符不能使用 出现在使用逗号分隔列表中的项目(如函数或列表的参数)的上下文中 初始化者。另一方面,它可以在带括号的表达式中使用,也可以在第二个表达式中使用 在这种上下文中条件运算符的表达式。在函数调用中

f(a, (t=3, t+2), c)
该函数有三个参数,第二个参数的值为5

您可以阅读更多内容,因为,运算符会丢弃左侧的所有操作数,而由于6是最右侧的操作数,因此它是唯一未被丢弃的操作数

这来自§6.5.17 n1570草案

逗号运算符的左操作数作为空表达式计算;有一个 其求值与右操作数求值之间的序列点。然后右转 计算操作数;结果有其类型和值

如语法所示,本款中所述的逗号运算符不能使用 出现在使用逗号分隔列表中的项目(如函数或列表的参数)的上下文中 初始化者。另一方面,它可以在带括号的表达式中使用,也可以在第二个表达式中使用 在这种上下文中条件运算符的表达式。在函数调用中

f(a, (t=3, t+2), c)
该函数有三个参数,第二个参数的值为5


当您在赋值语句中使用分隔符时,例如,“,”时,它会赋值到最后一个值,您可以阅读更多内容。例如 int i=2,3; //i=3;
变量i的值是3而不是2。

每当在赋值语句中使用分隔符,即“和”,它都会赋值到最后一个。例如 int i=2,3; //i=3;
变量我得到的值是3而不是2。

Wikipedia在运算符方面有很好的例子。你可以发布它们来进一步扩展这个答案。我从草稿中添加了一个。Wikipedia在操作符方面有很好的例子。您可以发布它们来进一步扩展此答案。我添加了草稿中的答案。请参阅