在以下代码中:
#include <stdio.h>
int main(void)
{
int i=-3,j=2,k=0,m;
m=++i||++j&&++k;
printf("%d %d %d %d",i,j,k,m);
}
Run Code Online (Sandbox Code Playgroud)
输出:
-2 2 0 1
为什么k = 0?因为我认为k也因为&&运算符而被执行?
C使用短路逻辑 - 因为++i它不是零,它是真的,因为它是||运算符的左侧,我们知道无论右侧是什么,它都会产生真实的结果.因此,C(以及一堆类似的语言)甚至不打算评估右侧,并且很快就会返回true.因为++k永远不会被评估,所以k仍然保持不变,并且仍然0在m=++i||++j&&++k;声明之后.
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |