【发布时间】:2019-09-08 21:16:22
【问题描述】:
由于指针运算是在同一个数组中定义的,我怀疑我们是否可以从另一个NULL 中减去NULL。我担心的是:
//first and second can both either be from the same array
//or be both NULL
prtdiff_t sub(void *first, void *second){
//Do I really need this condition?
if(!first && !second)
return (ptrdiff_t) 0;
return second - first;
}
【问题讨论】:
-
@St.Antario 实际上你已经自己解释过了,可能有你的参考...
-
好吧,在这里检查 NULL 会有一点帮助,因为任何 other 无效指针都会同样破坏它。
-
@St.Antario 在我寻找参考资料时发布了两个答案。 :p
-
@St.Antario 所以如果
NULL被定义为一个整数常量表达式,你可以从NULL中减去NULL,但这并不是不可移植的,因为它可能不是(而且通常是't) 定义为整数常量表达式。 -
即使
NULL被定义为整数0,那么在赋值char *a = NULL; char *b = NULL;之后,那么减法a - b仍然是非法的。
标签: c pointer-arithmetic null-pointer ptrdiff-t