[英]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.