C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)为什么结果是3,3,0,0?
在C语言中,赋值运算符(=)和相等运算符(==)具有不同的优先级和结合性。以下是对您提到的表达式的解释:
a = b = c:这是一个连续赋值的表达式。首先,c的值被赋给b,然后b的值(现在等于c)被赋给a。假设c的值为3,那么a和b的值都将被设置为3。
a = b == c:这是一个赋值和相等运算符的组合表达式。由于相等运算符(==)的优先级高于赋值运算符(=),所以首先计算b == c。如果b和c相等,则表达式的结果为1,否则为0。然后,将这个结果赋给a。假设b和c的值都为3,那么a的值将被设置为1。
a == (b = c):这是一个赋值和相等运算符的组合表达式。首先,将c的值赋给b,然后比较a和b的值。如果a和b相等,则表达式的结果为1,否则为0。假设a、b和c的值都为3,那么表达式的结果将为1。
a == (b == c):这是一个相等运算符的嵌套表达式。首先,计算b == c。如果b和c相等,则表达式的结果为1,否则为0。然后,比较a和这个结果。如果a等于这个结果,则表达式的结果为1,否则为0。假设a、b和c的值都为3,那么表达式的结果将为0,因为a(3)不等于b == c的结果(1)。
根据您给出的结果(3,3,0,0),我猜测a、b和c的初始值可能分别为0、3和3。在这种情况下,上述解释与您给出的结果一致。