关于 C 标准的另一个问题。我已经测试过了,对于任何不同于 NULL 的指针 ptr,语句 NULL < ptr 都是 true。但我知道标准规定指针运算和比较只有在数组范围内才有定义。我不确定这个特定的比较 NULL < ptr 是否合法。
编辑:我一直在阅读 K&R,发现了以下引用:
任何指针都可以与零相等或不相等地进行有意义的比较。但是对于指向不属于同一个数组成员的指针的算术或比较行为是未定义的。
无论如何,我仍然不确定指针 p !=NULL 时语句 p > NULL 是否保证总是返回 true。
编辑:我一直在阅读 K&R,发现了以下引用:
任何指针都可以与零相等或不相等地进行有意义的比较。但是对于指向不属于同一个数组成员的指针的算术或比较行为是未定义的。
无论如何,我仍然不确定指针 p !=NULL 时语句 p > NULL 是否保证总是返回 true。
<
的行为将是未定义的。因此,如果你有这样的代码:int main(){ int x, y; return &x < &y; }
,那么行为是未定义的。由于空指针不指向任何对象,所以进行指向空指针的关系比较(其中一个或两个操作数都是空指针)也会导致未定义的行为。 - James McNellis(uintptr_t)&x < (uintptr_t)&y
是有定义的,并且对于函数的任何给定调用,它将是 0 或 1。 - R.. GitHub STOP HELPING ICEuintprt_t
被定义,并且这基本上等同于说如果平台具有线性地址空间,才会这样做。 - Jens GustedtNULL
和其他空指针并不一定具有与所有位为零相对应的内部表示。 - Jens Gustedt