c - 在以下示例中,优先级和关联性如何工作?
问题描述
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 只
解决方案
m = ++i || ++j && ++k;
被分组为m = ++i || (++j && ++k);
since,&&
具有更高的优先级。但是,它们是从左到右评估的。
因为 ,++i = 4
是一个非零数,所以不计算右手表达式。我的意思(++j && ++k)
是不评估,因为左手表达式结果非零。
对于 A||B,如果 A = 1,则结果始终为 1,而与 B 的值无关。
由于不计算右手表达式,因此j
和的值k
保持不变。
此功能称为“短路评估”。