【发布时间】:2015-10-05 05:43:57
【问题描述】:
我有点困惑。
struct node *p; and if(p==NULL)
现在我根据我的研究收集到的是,NULL 不是内存地址,而是内存地址中的一个值(即 0)。当我使用if(*p==NULL) 时,它会给出一个错误——'operator==' 不匹配。但是*p 没有给出内存地址中的值。如果我们只使用p,我们不是将内存地址与内存地址中的值进行比较。为什么p==NULL 正确而*p=NULL 不正确。
【问题讨论】:
-
NULL 的概念是预定义的不可引用的内存区域。它是(理想情况下)在正确分配指针之前初始化指针的地方。传统的空检查应用于指针本身而不是取消引用它(这是 UB 并且可能导致段错误)
-
NULL与指针一起使用。这里if(p==NULL),p是一个指针,可以和NULL比较(假设p是一个全局变量,所以它会自动初始化为NULL)。但是这里if(*p==NULL),*p的类型是struct node,这不是指针。 -
如果你收集到了,你真的需要更好的学习材料。
-
@M.M 我真的在寻找答案,但我会根据你的建议采取行动。