今天,我阅读了《C语言程序设计(第2版)Brian W. Kernighan & Dennis M. Ritchie》的第167页,发现作者说我必须在使用 malloc
函数时进行类型转换。以下是书中相关部分:
7.8.5 存储管理
malloc
和calloc
函数用于动态获取内存块。
void *malloc(size_t n)
返回指向n字节未初始化存储空间的指针,如果无法满足请求,则返回NULL。
void *calloc(size_t n, size_t size)
返回足够空间存储由指定大小的n个对象组成的数组的指针,如果请求无法满足,则返回NULL。这段存储空间将被初始化为零。malloc或calloc返回的指针具有所涉及对象的适当对齐方式,但必须转换为适当的类型,如下所示:
int *ip;
ip = (int *) calloc(n, sizeof(int));
我已经知道malloc
(及其相关函数)返回类型void*,而且有很好的解释说明为什么不需要对malloc
进行强制转换。但是我的问题是:这本书为什么要我进行强制转换?
malloc
因为它不是C ++ - 除非必须使用 - 但你不应该 - 除了...啊啊啊啊啊啊啊!!!!! :-) - Bob Jarvis - Слава Україні