如何检查void指针是否指向NULL?

pyr*_*hic 7 c pointers void-pointers

所以,如果你这样做:

void *ptr = NULL;
Run Code Online (Sandbox Code Playgroud)

检查该void指针是否为NULL的最佳方法是什么?

我现在的解决方法是:

if (*(void**)ptr == NULL) ... 
Run Code Online (Sandbox Code Playgroud)

但这似乎不是最好的方法,因为我隐含地假设ptr是void**类型(它不是).

nma*_*ier 11

我只是写if (!ptr).

NULL基本上是0!0是真实的.

  • 我会将 ptr 与 NULL 进行比较;就像 ptr == NULL 一样。不保证 NULL 等于 0。 (3认同)
  • 不是在所有体系结构上,您将编写不可移植的代码.它可能是286,当使用段寻址时,NULL!= 0,但那是几十年前. (2认同)

Jac*_*man 6

一定要包含NULL的定义.

   #include <stddef.h>

   void  *X = NULL;

   // do stuff

   if (X != NULL)  // etc.
Run Code Online (Sandbox Code Playgroud)

如果你包括<stdio.h>和类似,然后stddef.h自动拉入.

最后,看看NULL的定义很有意思stddef.h,通过这样做,你会明白为什么你最初的猜测是有趣的.