【发布时间】:2016-02-07 09:13:46
【问题描述】:
如果我比较 C 中的两个指针,我知道 C 6.5.8/5 说:
指向稍后声明的结构成员的指针比指向之前在结构中声明的成员的指针要大
这很好,但如果其中一个指针是NULL 怎么办?我知道我可以做到foo != NULL 但例如这是否违反标准:
char *bar = NULL;
char *foo = "foo";
if(foo > bar) { function(); }
在大于的情况下,该部分没有专门针对NULL,这就是我感到困惑的原因。另外,如果您能告诉我它是否适用于 C89 和 C99。
澄清一下,这与只是我引用的标准的一部分的结构无关。该代码与我上面描述的非常相似。我有一些指向数组的指针,其中一个指针可能为空,因此我想知道是否可以使用大于进行比较。
【问题讨论】:
-
在游览示例中没有任何“指向结构成员的指针”。指向 &s.m 和 s.m 的指针也是不同的东西
-
您可能会混淆 指针的地址和 指针的内容。这是一个与标准一致的一般性声明,即指向稍后声明的结构的指针将具有更大的地址。当您比较
(foo > bar)时,您是在比较内容。 -
据我所知,这两个变量不是结构成员。
-
你还不如引用了关于三元组的部分。与 NULL 指针的唯一有效比较是
== NULL和!= NULL。 -
如果标准与问题无关,为什么要添加引用?