谁能解释一下这段代码?如何将值仅分配给变量 m,但输出是针对所有变量的更改。这里还有逻辑运算符和增量运算符的角色。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d%d%d%dn", i, j, k, m);
return 0;
}
||
或逻辑 OR 运算符具有短路属性。它只评估了RHS是LHS是FALSY。
在您的情况下,++x
的计算会产生一个值-2
,而不是 FALSY (0(。因此,RHS从未被评估过。
分解一下:
m = ++i || ++j && ++k;
>> m = (++i) || (++j && ++k);
>> m = (-2) || (++j && ++k);
>> m = 1 // -2 != 0
因此,仅更改m
和i
的值,其余变量将保留其值(因为它们不会被计算(。
也就是说,逻辑OR运算符的结果要么是0
,要么是1
,一个整数值。结果存储在m
中,在您的情况下。