#include<stdio.h>
int main(){
int x=2,y=2,z=0;
++x||++y&&z++;
printf("%d,%d,%d",x,y,z);
}
大家理所当然的认为是先按优先级运算++x,++y,z++,表达式为3||3&&0(1);
教科书上写的&&的优先级比||要高,所以大家又理所当然的认为表达式的求值顺序为3||(3&&0)
c把先计算哪部分的决定权留个设计者,但&&和||是例外,c语言保证&&和||的求值顺序是从左到右,一旦发现某个元素让表达式无效立即停止运算(短路法则)。所以本实例中执行了++x后值为真后边就都不执行了,结果就为3,2,0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)