本帖最后由 sunrise085 于 2020-3-30 18:01 编辑
所谓短路逻辑就是,同一优先级的多个部分进行逻辑运算的时候,从左向右开始运算,若前面的部分已经能够决定据俄国,则不再进行后面的运算,也就是说,与运算前面的结果为0或者或运算前面部分结果为1,都会对后面的进行短路。
- !(i >= 0 && i <= 5 && printf("%c\n", ch[i]))
复制代码
这个逻辑表达式,外层是非运算,所以先看括号内的结果,
然后会发现是三部分进行与运算,
这就涉及到短路逻辑了
先判断第一部分i>=0,若输入的i值小于0,那么该逻辑运算结果为0,则对后面的两部分短路,不再进行后两部分的运算,
若满足该条件,则判断第二部分i<=5,同样的道理,若输入的i值大于5,那么该逻辑运算结果为0,则对后面的运算短路,不再进行后面的运算,
若这两部分都符合条件,则判断第三部分printf,printf函数的返回值是程序打印出来字符的个数。这里会先执行这个prinf语句,然后再对其返回值进行判断,前两部分已经确定i值符合条件,字符数组没有赋值的单元为'\0',而'\0'以%c打印输出,则不会有显示,printf返回值为1(这个程序中%c后还有一个'\n',因此返回值为2),因此若输入的i=5,printf返回值为2,这样if条件的逻辑运算 !(1 && 1 && 2) 结果为0,不执行if语句块printf("非法访问!\n")