1.这个表达式等价于(!x)||(y--);
就是!x的值和y的值求或运算,如果!x的值为1,那么整个表达式的值为1,而且y--运行不到,这是因为||的逻辑短路规则,因为参与或运算只要有一个参数是1,那么或运算的结果就是1,而不用管另外一个参数是1还是0;
如果!x的值为0,那么运算完或运算以后,y的值再减1
2.for(i=0;x>8;y=++i){语句A}
运行的时候,先运行一次(唯一的一次)i=0;
开始循环:如果x>8,那么执行语句A,然后执行y=++i;
如果x>8,那么执行语句A,然后执行y=++i;
....
直到x<=8,结束循环,不再运行y=++i;
i=0;
x=10,x>8成立,所以执行printf("%d,%d",x--,y);这个语句等价于{printf("%d,%d",x,y);x=x-1;} 所以是输出10,10;x=9
执行y=++i;等价于{i=i+1;y=i;}i=1,y=1;
x=9,x>8成立,所以执行printf("%d,%d",x--,y);所以输出9,1;x=8
执行y=++i;所以i=2,y=2
x=8,x>8不成立,for循环结束
综上所述,输出结果是10,10 9,1(实际显示效果应该是10,109,1)
3.a<b?a:c<d?a:d
判断a<b真假,如果真那么执行a;
如果假,那么执行c<d?a:d
{判断c<d真假,如果真,那么执行a;如果假,那么执行d}
4.x+=y+=z
赋值运算是右结合的,也就是形如这样的y左边有x,右边有z,先运算y+=z;也就是y=y+z,然后运行x+=y,所以x+=y+=z相当于{y=y+z;x=x+y;}
温馨提示:答案为网友推荐,仅供参考