为什么《 C 编程语言》一书说我必须使用 malloc?

今天我翻到 C 编程语言(第二版布莱恩·柯林汉和丹尼斯·里奇)167页,发现作者说我必须演 malloc。这是书中的一部分:

7.8.5存储管理

Malloc 和 calloc 函数动态地获取内存块。

void *malloc(size_t n)

返回一个指向 n 个字节的未初始化存储的指针,或者如果请求不能被满足,返回 NULL。

void *calloc(size_t n, size_t size)

返回一个指针,该指针指向指定大小的 n 个对象的数组的足够空闲空间,如果 无法满足请求。存储被初始化为零。 Malloc 或 calloc 返回的指针对有问题的对象具有适当的对齐方式, 但它必须被转换成适当的类型,如

int *ip;
ip = (int *) calloc(n, sizeof(int));

我已经知道 malloc(及其系列)返回类型 无效 * 有很好的解释为什么不投 malloc

但我的问题是: 为什么这本书说我应该投它?

16136 次浏览

来自 http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm:

在 pre-ANSI C 中——如 K & R-1中所述—— malloc ()返回一个 char * 而且在所有情况下都必须强制转换它的返回值 接收变量也不是 char * 标准 C 使得这些扭曲没有必要。

避免任何人陷入不必要的尴尬 为了给 K & R-2辩护,我向 Dennis Ritchie 征求意见 引用上文第142页所引句子的有效性 答复:

无论如何,现在我重读了第142页的内容,我认为它是 错误的; 它被写成这样的方式,它不仅仅是防御性的 与之前的规则相反,它歪曲了 ANSI 的规则