搜尋

首頁  >  問答  >  主體

c++ - 关于C语言链表的while循环

while(num!=q->num&&q!=NULL){
q=q->next;
}//q为一个链表

这样写有什么问题吗?经过我不断的debug,基本把错误缩小到这句上,程序也能运行,但是输入一个数赋值给num后,程序会报错。具体表现为程序停止工作。

已找到原因,吧q!=NULL和num!=q->num调一下位置就行了。

伊谢尔伦伊谢尔伦2773 天前454

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-04-17 14:43:38

    &&運算子先計算左邊的表達式,如果為假就直接回傳假,如果為真再計算右邊的表達式。

    回覆
    0
  • PHPz

    PHPz2017-04-17 14:43:38

    這不就是短路求值的問題嘛.

    作為"&&"和"||"運算子的運算元表達式,這些表達式在進行求值時,只要最終的結果已經可以確定是真或假,求值過程便告終止,這稱為短路求值(short-circuit evaluation)。這是這兩個操作符的一個重要屬性。

    應該先判斷 q 是否為 null, 根據短路求值的規則, 當 q 不為 null 時, 才執行語句 num!=q->num. 這樣就可以避免空指標的問題了.

    回覆
    0
  • 取消回覆