首页 > 解决方案 > 在以下示例中,优先级和关联性如何工作?

问题描述

int i=3,j=1,k=0,m;
m=++i || ++j && ++k;
printf("%d%d%d%d",i,j,k,m);

//输出是 4 1 0 1 enter code here //谁能解释为什么 k=0 和 j=1 只

标签: coperator-keyword

解决方案


m = ++i || ++j && ++k; 被分组为m = ++i || (++j && ++k);since,&&具有更高的优先级。但是,它们是从左到右评估的。

因为 ,++i = 4是一个非零数,所以不计算右手表达式。我的意思(++j && ++k)是不评估,因为左手表达式结果非零。

对于 A||B,如果 A = 1,则结果始终为 1,而与 B 的值无关。

由于不计算右手表达式,因此j和的值k保持不变。

此功能称为“短路评估”。


推荐阅读