&&和||运算有一个短路特性简单叙述如下。
要使(表达式1)&&(表达式2)运算结果为真则要求:表达式1,表达式2都为真,如果表达式1为假,则不计算表达式2了,因为此时已经确定(表达式1)&&(表达式2)运算结果不可能为真,这就是&&运算的短路特性。
要使(表达式1)||(表达式2)运算结果为假则要求:表达式1,表达式2都为假,如果表达式1为真,则不计算表达式2了,因为此时已经确定(表达式1)||(表达式2)运算结果不可能为假,这就是||运算的短路特性。
#include<stdio.h>
int main(void)
{
int a=0,b=1;
if(a++&&b++)
{
printf("a=%d b=%d\n",a,b);
}
else
{
printf("a=%d b=%d\n",a,b); //因为&&短路特性,应执行此句,且b++不执行
}
if(a++||--b)
{
printf("a=%d b=%d\n",a,b); //因为||短路特性,应执行此句,且--b不执行
}
else
{
printf("a=%d b=%d\n",a,b);
}
return 0;
}