空指针和void指针之间有什么区别?

Pav*_*tar 59 c pointers

什么是Null指针Void指针之间的区别?

AnT*_*AnT 112

空指针指针的特殊保留.任何类型的指针都有这样的保留值.在形式上,每个特定的指针类型(int *,char *等)具有其自身专用的空指针值.从概念上讲,当指针具有该空值时,它不指向任何位置.

Void指针是一种特定的指针类型 - void *指向存储器中某些数据位置的指针,它没有任何特定类型.

所以,再一次,空指针是一个,而void指针是一个类型.这些概念完全不同,不具有可比性.这实际上意味着你所提出的问题并不完全有效.例如,问问题是"三角形和汽车之间有什么区别?".

  • @Pavitar,它作为标记很有用.例如,指示尚未分配内存的指针或标记链接列表的结尾. (14认同)
  • @Pavitar:空指针常量保证无效,并且可以识别.您不能将它与任何有效指针混淆.因此,它可以用作失败的信号,或者没有更多数据的标记,或指针不指向任何地方的标记,或类似的东西. (7认同)
  • Null指针是否有用,就像我们编写代码时一样? (4认同)
  • 你可以和你应该使用Null Pointers.例如,如果malloc无法分配内存,则返回空指针.在free()之后将指针指向null是一个很好的做法,以避免悬空指针http://en.wikipedia.org/wiki/Dangling_pointer (4认同)

van*_*nza 11

它们是两个不同的概念:"void指针"是一种类型(void*)."空指针"是一个值为零(NULL)的指针.例:

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

这是一个NULL void指针.


aar*_*ing 6

保证空指针不等于任何对象的指针。它的实际值取决于系统,并且可能因类型而异。要获得空int指针,您可以这样做

int* p = 0;
Run Code Online (Sandbox Code Playgroud)

malloc失败时将返回空指针。

我们可以简单地通过测试其布尔值来测试指针是否为空,即是否malloc或其他函数失败:

if (p) {
    /* Pointer is not null */
} else {
    /* Pointer is null */
}
Run Code Online (Sandbox Code Playgroud)

void 指针可以指向任何类型,并且由您来处理引用的对象为了取消引用和指针运算而消耗多少内存。