先简单说说功能:
“&&”:
左边是false,则不执行右边表达式;
左边是true,则执行右边表达式。
“||”:
左边为true,则不执行右边表达式;
左边为false,则执行右边表达式。
如上所言&&和||具有短路效果,因而一些运算如果放在判断中可能会引起错误
int main(){
int i=1;
if(i==1||i++==1&&i==1)
printf("yes\n");
else
printf("no\n") ;
printf("%d",i);
return 0;
}
上面着串代码的运行结果为
yes
1
可见由于||的短路特性导致i++==1没有执行,直接跳到接下来的&&的判断,因为i++1被跳过,而i1的结果为true,故&&判断左边为true,最终整体判断为true,输出yes
以上为个人理解,如果有什么地方出了错误,恳请指正