一个栗子:
for ( j=100; j>=0 && v[j]>key; j--) {
;//do something
}
运行没有问题。
但是假如我把这段代码这么写:
//注意&&前后的表达式调换了位置
for ( j=100; v[j]>key && j>=0 ; j--) {
;//do something
}
这个时候运行就出了问题!
原因是如果判定&&前面的表达式值为false就不会继续向后判断了。
在本例中:
j>=0
在前面保证了j取到-1时直接跳出循环。如果v[j]>key在前,当j取到-1时会发生错误。