C 比较两个指针是否大于,如果其中一个为空

hio*_*ere 3 c pointers c89

如果我比较 CI 中的两个指针,我就会知道 C 6.5.8/5 中表示:

指向后面声明的结构成员的指针大于指向结构中前面声明的成员的指针

这很好,但是如果其中一个指针是 呢NULL?我知道我可以这样做foo != NULL,但例如这是否违反标准:

char *bar = NULL;
char *foo = "foo";
if(foo > bar) { function(); }
Run Code Online (Sandbox Code Playgroud)

本节没有具体说明NULL大于的情况,这就是我感到困惑的原因。另外您能否告诉我它是否适用于 C89 和 C99。

澄清一下,这与结构无关,结构只是我引用的标准的一部分。该代码与我上面描述的非常相似。我有一些指向数组的指针,其中一个指针可能为空,因此我想知道是否可以使用大于进行比较。

250*_*501 5

你的例子确实是未定义的。正如C11, 6.5.8., p5中所解释的,每条规则都要求指针指向同一对象或该对象之后的对象。

<, >, <=, >=因此,只有当两个指针指向同一个对象或指向该对象之后的一个对象时,才可以使用关系运算符: 来比较两个指针。在所有其他情况下:

6.5.8。关系运算符,

  1. 。在所有其他情况下,行为是未定义的。

值为 NULL 的指针(空指针)不指向对象。对此进行了解释:

6.3.2.3 指针

  1. 如果将空指针常量转换为指针类型,则生成的指针(称为空指针)保证与任何对象或函数的指针比较不相等。

  • 最后一个答案涉及与 NULL 进行比较,而不是依赖于“结构成员”。 (3认同)