所以我已经阅读了 calloc
的文档它说它将初始化 n
大小物体size
并将它们分别初始化为 0。
因此,在用 C 语言实现通用动态数组之前,我决定使用 int
来实现它。键入以使事情变得更简单。我曾经打电话calloc
缓冲区中的每个整数都将被初始化为 0
意思是空白。但是当我将数据缓冲区从 int *buffer
更改为至void **buffer
我一直想知道这是否正确地将每个 void 指针初始化为 NULL
。我见过NULL
被转换到 0
如果你这样做int a = NULL
但void *p = 0
与 void *p = NULL
相同?这就是calloc
实际上是这样吗?
最佳答案
NULL保证不指向任何东西。 calloc
所做的只是在 malloc
之后对内存进行零填充。
“空指针在概念上与未初始化的指针不同。众所周知,空指针不指向任何对象或函数;未初始化的指针可能指向任何地方。另请参见问题 1.30、7.1 和 7.31。”
“如上所述,每种指针类型都有一个空指针,并且不同类型的空指针的内部值可能不同。虽然程序员不需要知道内部值,但编译器必须始终知道是哪种类型需要空指针,以便在必要时进行区分(参见问题 5.2、5.5 和 5.6)。”
关于c - 使用 calloc 初始化 void* 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436438/