请在本程序中说明逗号运算符

请解释一下这个程序的输出:

int main() { int a,b,c,d; a=10; b=20; c=a,b; d=(a,b); printf("\nC= %d",c); printf("\nD= %d",d); } 

我得到的输出是:

 C= 10 D= 20 

我的疑问是,“运营商”在这里做什么?
我使用代码块编译并运行程序。

该运算符评估一系列expression式并返回最后一个的值。

c=a,b(c=a),b 。 这就是为什么C是10

c=(a,b)将把c=(a,b)的结果赋值给20。

正如Mike在评论中指出的那样,赋值( = )的优先级高于逗号

那么,这是关于运营商的优先事项:

 c=a,b 

相当于

 (c=a),b 

重点是,“,”运算符将返回第二个值。

从而

 c=a,b 

将a赋给c并返回b

 d=(a,b) 

返回b并将其分配给d

逗号运算符评估其所有操作数,然后得出最后一个expression式的值。