c语言,以下程序运行后的输出结果是

以下程序运行后的输出结果是
main()
{
int a=0,b=0,c=0;
c=(a+=a-=5),(a=b,b+3);
printf("%d,%d,%d\n",a,b,c);
}

我用程序输出的是0,0,-10。哪位大神可以帮我详细解释一下,尤其是c的值在逗号表达式中,不应该取右边的吗,为什么还是左边的-10呢?

c=(a+=a-=5)是一个表达式,(a=b,b+3)是另一个表达式。

a=0,a=a-5=-5,a=a+a=(-5)+(-5)=-10,将值赋给c,c=-10,此时,a=-5
a=b,将b的值赋给a,a=0,执行b+3=0+3=3,这个3不对任何变量赋值。
因此最终结果a=0,b=0,c=-10
输出a、b、c的值,输出0,0,-10追问

麻烦问一下,这个不是逗号表达式吗?第一个括号和第二个括号不用分号隔开吗?

追答

是逗号运算符,而且是两个逗号运算符的嵌套。只不过你对逗号运算符并没有掌握,所以理解错了。你加的两个括号,加不加都可以,并无什么不同,加了也是白加,没有什么用。
如果你想将逗号运算符运算的最终结果赋给c,不是你写的这样的,而是
c=(a+=a-=5,a=b,b+3);
这样才是将逗号运算符运算的最终结果赋给c。

温馨提示:答案为网友推荐,仅供参考