簡體   English   中英

那個條件是什么意思?

[英]What does it mean that condition?

這個current -> yes在 if 條件下應該評估什么? (這不是完整的代碼,您可以假設是的任何問題)

typedef struct node {
    char *question;
    struct node *no;
    struct node *yes;
} node;

node *current;

if (current->yes) {
    current = current->yes;
}

非常感謝您的幫助

這意味着如果current->yes不是0 (不是空指針)。

通過取消引用current對象,您將獲得struct node *類型的yes成員的地址。 也就是說,如果正確分配內存,它將是非零,如果不是,它將是 0 或NULL 例如,內存分配可能會失敗。

所以,基本上是條件: if (current->yes) { ... }檢查內存分配是否正確。

以下代碼:

if (current->yes) {
    current = current->yes;
}

相當於

if (current->yes != NULL) {
    current = current->yes;
}

所以條件是檢查是不是空指針

C 中的if()構造被定義為評估其參數並將其與0進行比較。 因此,考慮到NULL比較等於0if(foo)總是等價於if(foo != 0)if(foo != NULL)

或者,換句話說, if(myPointer)檢查指針是否指向有效對象。 這是 C 編程中非常常見的習語。


即使您編寫if(a == b)也是如此。 這完全等同於if((a == b) != 0)a == b值要么是0表示假,要么是1表示真,然后抽象機將結果與0進行比較以確定哪個分支來執行。 顯然,編譯器將直接使用if(a == b)中的比較結果,因為這相當於產生10然后第二次與0進行比較。 但是,語言是通過與0的額外比較來定義的,以使其完全不知道括號內使用的是哪種表達式。 所有語言關心的是結果值是否與0相當。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM