c - 使用 calloc 初始化 void* 缓冲区

标签 c arrays buffer dynamic-memory-allocation calloc

所以我已经阅读了 calloc 的文档它说它将初始化 n大小物体size将它们分别初始化为 0

因此,在用 C 语言实现通用动态数组之前,我决定使用 int 来实现它。键入以使事情变得更简单。我曾经打电话calloc缓冲区中的每个整数都将被初始化为 0意思是空白。但是当我将数据缓冲区从 int *buffer 更改为至void **buffer我一直想知道这是否正确地将每个 void 指针初始化为 NULL 。我见过NULL被转换到 0如果你这样做int a = NULLvoid *p = 0void *p = NULL 相同?这就是calloc实际上是这样吗?

最佳答案

NULL保证不指向任何东西。 calloc 所做的只是在 malloc 之后对内存进行零填充。

“空指针在概念上与未初始化的指针不同。众所周知,空指针不指向任何对象或函数;未初始化的指针可能指向任何地方。另请参见问题 1.30、7.1 和 7.31。”

“如上所述,每种指针类型都有一个空指针,并且不同类型的空指针的内部值可能不同。虽然程序员不需要知道内部值,但编译器必须始终知道是哪种类型需要空指针,以便在必要时进行区分(参见问题 5.2、5.5 和 5.6)。”

http://c-faq.com/null/null1.html

关于c - 使用 calloc 初始化 void* 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436438/

相关文章:

c++ - 如何在C/C++中保存数据?

c - 如何以标准方式修剪前导/尾随空格?

c++ - Dll 未在 Firefox 中加载,但在自定义应用程序中加载

c - 使用 snprintf 的缓冲区溢出

c - 是否可以在调用函数之前分配一个函数指针?

c++ - char数组如何存储在C++中?

arrays - 如何在 Swift 对象数组中找到最大值?

python - python pandas 中的双端队列

c++ - 如何在 C++ 中将结构写入文件并读取文件?

javascript - 为什么在为 Javascript 原型(prototype)定义函数时,函数名称会出现在 for 循环中?