繁体   English   中英

C中的递增运算符

[英]Increment operator in C

我尝试了以下代码段:

void main()
{
    int x = 1,y = 1,z = 1;
    ++x || ++y && ++z;
    printf("x = %d\ny = %d\nz = %d\n",x,y,z);
}

预期的输出是:

x = 2
y = 2
z = 2

但我得到的输出:

x = 2
y = 1
z = 1

这是什么原因?

这是因为短路。

http://en.wikipedia.org/wiki/Short-circuit_evaluation

评估时:

++x || ++y && ++z;

第一部分++x已经确定了整个表达式的值。 所以++y && ++z根本没有被执行。 因此,不会调用++y++z的副作用。

++x的结果非零,因此求值为true,因此将||短路 运营商。 ++y && ++z未执行。

原因是你正在使用带有副作用的Brobdingnagian布尔表达式。

运算符&&|| 是“短路”。 这意味着如果在计算左操作数之后确定表达式的结果,则永远不会计算右操作数。

避免使用带有副作用的表达式作为布尔运算符的操作数。 即使行为是你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM