x,y& z的修改后的值是什么,这是一个C语言程序? 请问,Exaplain为什么?
main()
{
int x,y,z;
x=y=z=1;
z=++x||++y&&++z;
printf("x=%dy=%dz=%d",x,y,z);
}
答案 0 :(得分:2)
只有x
被修改,其值变为2
。这背后的原因是逻辑运算符||
的短暂的cicuiting行为
编译器将z=++x||++y&&++z;
解释为
z = ++x || (++y&&++z);
因为&&
优先于||
。
由于x
为1
,即||
的第一个子表达式为真,因此不会检查(并评估)其他子表达式。
注意:您可能会收到某些编译器的警告
[Warning] operation on 'z' may be undefined [-Wsequence-point]
这是因为您无法在两个序列点之间修改变量两次。但是在上面的代码中z++
永远不会被评估,所以它的行为不是未定义的。