int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d\n”,a,b,c);
按程序运行来讲吧。
第一句不说了...
第二句为逗号表达式。
c=(a-=a-5)
给c赋值,把a-=a-5的结果赋给c;
(a-=a-5)=(a=a-(a-5));
把a=0;代入得a=5;
进而(a-=a-5)的值为5;
c=5;
接下来执行(a=b,b+3);
这里面又有逗号表达式。
a=b;因b=0;故a=0;
b+3;不对任何变量赋值,相当于空语句;
综上所述:a=0;b=0;c=5.
优先级 () > = >,
所以第一步
(a -= a - 5) 运算完 a=5
c=a=5
第二步
a=b ,此时 b还是0 所以 a又变为0 ;b+3没有用途
最后a=0;b=0;c=5
a -= a - 5 ----->a = 5;
c = (a -= a - 5)---->c=a=5;
a=b --------------->a=b=0;
b+3--------------->这应该是个空运算,b不改变,头次看到~~
所以a=0,b=0,c=5