这种情况意味着什么?

时间:2020-02-28 09:46:21

标签: c

current -> yes在if条件下应评估什么? (这不是完整的代码,您可以在“是”中假设任何问题)

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

node *current;

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

非常感谢您的帮助

4 个答案:

答案 0 :(得分:2)

这意味着Rectangle a(2,3); std::cout << a.get_width() << '\n'; Rectangle b = Rectangle(4,5); std::cout << b.get_width() << '\n'; 不是current->yes(不是空指针)。

答案 1 :(得分:2)

通过取消引用yes对象,您将获得类型struct node *的{​​{1}}成员的地址。也就是说,如果正确分配了内存,它将为非零;否则,它将为0或current。例如,内存分配可能失败。

因此,基本上情况是:NULL检查内存是否分配正确。

答案 2 :(得分:2)

以下代码:

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

等效于

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

所以条件是检查是不是NULL指针

答案 3 :(得分:1)

C中的if()构造被定义为评估其参数并将其与0进行比较。因此,考虑到if(foo)比较等于if(foo != 0)if(foo != NULL)始终等于NULL0

或者换一种说法,if(myPointer)检查指针是否指向有效对象。这是C编程中非常常见的习惯用法。


即使您写if(a == b),也是如此。这完全等效于if((a == b) != 0)a == b的值是0代表假,或者1代表真,然后将该结果与0进行比较抽象机确定要执行的分支。显然,编译器将直接使用if(a == b)中的比较结果,因为这等效于生成10,然后第二次与0比较。但是,该语言是通过与0进行额外比较来定义的,以使其完全不知道括号内使用哪种表达。语言只关心其结果值可与0相比较。