相关疑难解决方法(0)

是否定义了减去两个NULL指针的行为?

是否定义了两个非void指针变量(根据C99和/或C++ 98)的差异NULL

例如,假设我有一个如下所示的缓冲区结构:

struct buf {
  char *buf;
  char *pwrite;
  char *pread;
} ex;
Run Code Online (Sandbox Code Playgroud)

比如说,ex.buf指向一个数组或一些malloc的内存.如果我的代码始终保证pwritepread点阵列中或一个过去,然后我相当有信心,ex.pwrite - ex.pread总是被定义.但是,如果pwritepread都是NULL.我可以只期望减去两个定义为(ptrdiff_t)0或严格兼容的代码需要测试指针为NULL吗?请注意,我感兴趣的唯一情况是两个指针都是NULL(表示缓冲区未初始化的情况).原因在于满足前面的假设,完全符合"可用"功能:

size_t buf_avail(const struct s_buf *b)
{     
    return b->pwrite - b->pread;
}
Run Code Online (Sandbox Code Playgroud)

c c++ c99 c89

75
推荐指数
3
解决办法
2918
查看次数

我们可以减去NULL指针吗?

由于指针算术是在同一数组中定义的,我怀疑是否可以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;
}
Run Code Online (Sandbox Code Playgroud)

c pointer-arithmetic null-pointer ptrdiff-t

5
推荐指数
2
解决办法
171
查看次数

标签 统计

c ×2

c++ ×1

c89 ×1

c99 ×1

null-pointer ×1

pointer-arithmetic ×1

ptrdiff-t ×1