铺垫: 逻辑与运算符的功能是的前后表达式进行相与的判断,即同为真结果才为真,只要有一个为假,结果就为假
问题: 正因为有这一特点,为了节省时间,逻辑与在使用时具有短路特性,即当发现第一个表达式为假时就不会去做对第二个表达式的运算。
**重点:**当我们知道有这一特性之后,在普通使用过程中只要恰当的去注意他就行了,但是这一特性有一个妙用,如下数据结构代码:
if(plist != NULL && plist->next != NULL) //plist为单链表节点指针
我们先来分析一下这行代码,本来plist->next != NULL
这个表达式必须得在plist != NULL
这个表达式为真时做出运算,即我们在plist
不为空的情况下才能去判断它的next
,否则就会报错,那么用“&&”运算符连接起来之后刚好有这一效果,在短路特性的约束之下只有在plist != NULL
为真时plist->next != NULL
才会做出运算,但是这里需要注意的一点是这两个表达式的位置不能调换,至于为什么,再看一遍!
逻辑或运算符也有这一特点,其短路特性和逻辑与运算符相似,我们对上边的代码稍加改动,
if(plist == NULL || plist->next == NULL) //plist为单链表节点指针
其原理与上边相同,可以自己揣摩揣摩。