我想知道为什么在下面的代码中k的值是1。
我认为++i || ++j && ++k
是按照命令执行的:
((++i || ++j) && ++k)
所以,在第一个片段,(++i || ++j)
,++i
是真实的,所以++j
不计算,所以i=2
,j=1
。接着,在第二个片段,(true && ++k)
,所以++k
被评估,然后k=2
。
#include <stdio.h>
int main(void)
{
int i, j, k;
i = 1; j = 1; k = 1;
printf("%d ", ++i || ++j && ++k);
printf("%d %d %d\n", i, j, k);
return 0;
}
但,
printf("%d %d %d\n", i, j, k);
表演
2 1 1
我不知道自己错了什么或者我误解了什么。
逻辑AND运算符的&&
优先级高于逻辑OR运算符||
。因此,该表达式实际上被解析为:
++i || (++j && ++k)
++i
计算结果为true这样的整个右侧||
,即++j && ++k
,不进行评估。这既j
不会k
增加也不会增加。
对于您自己和其他阅读您的代码的人来说,可能很难记住所有优先规则。因此,如有疑问,请使用圆括号来阐明您的意图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句