[英]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
比較等於0
, if(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)
中的比較結果,因為這相當於產生1
或0
然后第二次與0
進行比較。 但是,語言是通過與0
的額外比較來定義的,以使其完全不知道括號內使用的是哪種表達式。 所有語言關心的是結果值是否與0
相當。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.