先看下如下代码:
int main()
{
int a = 1, b = 2, c = 3;
printf("%d %d %d %d",a=b=c,a=b==c,a==(b=c),a==(b==c));// 3 3 0 0
return 0;
}
对于这个代码的理解:
首先在C语言中,函数调用的时候,会把参数压栈,压栈的过程是从右往左处理,在此之前需要先计算需要压栈的具体的值:
a==(b==c)
b==c因为b和c的结果不同,所以这个表达式结果为假,即0。再判断a==0,a为1,所以两值不等,整个表达式结果为0
a==(b=c)
首先把c赋值给b,所以b此时结果为3。小括号表达式结果也为3,a==3为假,结果为0
a=b==c
==比较b和c,上次计算b已经为3了,c也为3,所以相等,表