由于指针算术是在同一数组中定义的,所以我怀疑我们是否可以将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;
}
注意:这个问题是关于C语言的。如果你在寻找关于C++的问题,可以在这里找到(答案不同!)。还有一个常见问题适用于C和C++。
NULL
被定义为整数常量表达式,那么你可以从NULL
中减去NULL
,但这不是可移植的,因为它可能没有(通常不会)被定义为整数常量表达式。 - Ian AbbottNULL
被定义为整数0,那么在赋值char *a = NULL; char *b = NULL;
之后,减法a - b
仍然是非法的。 - Ian Abbott