解释这个输出是如何产生的。
#include <stdio.h>
int main()
{
int x,y,z;
x = y = z = -1;
z = ++x && ++y && ++z;
printf("%d %d %d", x, y ,z);
return 0;
}
我以为 x,y,z 所有的值都会是 0 但实际输出是 x=0,y=-1,z=0。
最佳答案
这里涉及两件事:运算符关联性和short-circuit evaluation (请参阅链接以了解它是什么以及它的作用)。
由于 &&
运算符的结合性,表达式 ++x &&++y &&++z
等于 (++x &&++y) &&++z
.
如果我们执行子表达式 ++x &&++y
那么结果是 false
。 ++x
的结果是 0
,所以我们有 0 &&++y
。在 C 中,零与 bool 值 false
相同,并且由于短路评估 ++y
永远不会发生。 y
的值保持在 -1
。
因此对于第一个子表达式的结果,我们有 false &&++z
。同样由于短路评估 ++z
从未发生,结果再次为 false
。
所以++x &&++y &&++z
的结果是false
,然后赋值给z
。在赋值中, bool 值 false
被隐式转换为整数值 0
。这是 z
的打印值。
关于c - 查找此输出的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57157846/