关于C标准的另一个问题。我已经对此进行了测试,并且总是NULL < ptr
为真,其中ptr
是任何与NULL
不同的指针。但我知道标准说指针算术和比较仅在数组的边界内定义。我只是不确定特定的比较NULL < ptr
是否合法。
编辑:我一直在阅读K&amp; R,我发现了以下引用:
任何指针都可以有意义地比较等于或不等于零。但是对于算术或与不指向同一数组成员的指针进行比较的行为是未定义的。
我不确定这是否会影响已经提出这个问题的答案。在任何情况下,我仍然不确定p > NULL
是否始终保证返回true,其中p
是指针!=NULL
。
答案 0 :(得分:6)
NULL < ptr
无效:无法对空指针进行关系比较。这样做会产生不确定的行为。
你是正确的,你只能比较指向同一个对象的指针(无论是数组中的元素还是聚合的子对象)。由于空指针不指向任何对象,因此无法将其与任何对象进行关联比较。
答案 1 :(得分:3)
仅定义了与另一个NULL(= true)或不是(= false)的比较。
NULL 一般定义为零,因此通常比较小于,但实际上它没有定义