繁体   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