#include<stdio.h>
int main( )
{
int a = 1 , b = 2 , c = 3 ;
printf( "%d,%d,%d,%d\n" , a = b = c , a = b == c , a == ( b = c ) , a == ( b == c ) ) ;
return 0 ;
}
单条赋是从右向左运算,其他都是从左向右 括号优先级最高
printf语句是从最后的一项开始运算的,即先算a == ( b == c ), 由于 b == c 为假 所以进行 a == 0运算由于 a = 1 所以结果为0
再接着是a == ( b = c ) ,先算b = c 将c的值赋值给b 所以此时 b = 3 c = 3 a = 1,后计算 a == 3 得到假 所以结果为0
再接着是a = b == c, 先算b == c 得到1 又将值赋值给a 但需要注意,此时运算还没结束,这个1 还没有向双引号中的%d替换
最后计算 a = b = c, 得到 a = 3, b = 3, c = 3, d = 3, 此时开始将逗号后面的内容替换掉双引号中的%d
得到 3,3,0,0