此current -> yes
在if条件下应评估什么? (这不是完整的代码,您可以在“是”中假设任何问题)
typedef struct node {
char *question;
struct node *no;
struct node *yes;
} node;
node *current;
if (current->yes) {
current = current->yes;
}
非常感谢您的帮助
答案 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)
始终等于NULL
或0
。
或者换一种说法,if(myPointer)
检查指针是否指向有效对象。这是C编程中非常常见的习惯用法。
即使您写if(a == b)
,也是如此。这完全等效于if((a == b) != 0)
:a == b
的值是0
代表假,或者1
代表真,然后将该结果与0
进行比较抽象机确定要执行的分支。显然,编译器将直接使用if(a == b)
中的比较结果,因为这等效于生成1
或0
,然后第二次与0
比较。但是,该语言是通过与0
进行额外比较来定义的,以使其完全不知道括号内使用哪种表达。语言只关心其结果值可与0
相比较。