一個栗子:
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時會發生錯誤。