4

关于C标准的另一个问题。我已经对此进行了测试,并且我总是NULL < ptr正确的,ptr任何指针都不同于NULL. 但我知道标准说指针算术和比较只在数组的范围内定义。我只是不确定特定的比较NULL < ptr是否合法。

编辑:我一直在阅读 K&R,我发现以下引用:

任何指针都可以有意义地比较是否等于或不等于零。但是对于算术或与不指向同一数组成员的指针的比较,行为是未定义的。

我不确定这是否会影响已经对此问题给出的答案。无论如何,我仍然不确定是否p > NULL始终保证返回 true,p指针在哪里!=NULL

4

2 回答 2

6

NULL < ptr无效:空指针不能进行关系比较。这样做会产生未定义的行为。

您是正确的,您只能以关系方式比较指向同一对象的指针(指向数组中的元素或聚合的子对象)。由于空指针不指向任何对象,因此您无法将其与任何对象进行相关比较。

于 2012-09-01T03:30:06.627 回答
3

仅定义与另一个 NULL (=true) 或不 (=false) 的比较。

NULL通常定义为零,因此通常比较小于,但实际上它没有定义

于 2012-09-01T03:31:48.140 回答