引言:C语言的逻辑运算符有一个特点,他总是先对左侧的表达式求值,再对右侧的表达式求值,这个顺序是保证的。如果左边的表达式的值满足逻辑运算符的条件,就不会再对右边的表达式求值。这种情况称为“短路”。
这种情况会出现在&&(并且)和||(或者)。短路的本质还因该从这两个符号说起:
1、&&:对于并且来讲,()&&();当一个表达式的左边为真时还要考虑右边是否为真,当两边同时为真时,整个式子才是真的。但是当左边为假时,就不用再考虑右边式子是否成立。
实例:
当我们输入如下代码时:
表达式中的坐操作符是month >= 3,右操作数是month <=5,当左操作数的结果为0时,即使不判断右侧的结果,整个表达式的结果也是0。
所以对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不会再执行了
操作实例;
代码讲解:在进行赋值操作的时候呢 a++,是先使用再加1,所以呢开始时a=0,使用后才变成1,所以当a使用时为0时,&&右边的操作数就不再执行,所以最后的输出结果为a=1,b=2,c=3,d=4;
2、||:对于并且来讲,()||();当一个表达式的左边为假时还要考虑右边是否为假,当两边同时为假时,整个式子才是假的。但是当左边为真时,就不用再考虑右边式子是否成立。
实例:
当我们输入如下代码时:![](https://i-blog.csdnimg.cn/blog_migrate/9072a5aa74c81a313241a4412aa6b15b.png)
如果month==12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1。 所以, || 操作符的左操作数的结果不为0时,就无需执行右操作数。
操作实例:
代码讲解:在进行赋值操作的时候呢 a++,是先使用再加1,所以呢开始时a=0,使用后才变成1,所以当a使用时为0时,继续执行++b,以此类推
以上就是有关短路的问题了,希望可以给你带来收获,喜欢的话记得点赞收藏,谢谢大家!