是否有必要对malloc和calloc进行类型转换
可能重复:
我是否施放了malloc的结果?
我在Google上搜索找出malloc和calloc的类型转换的原因。 但是,我只发现malloc的类型转换是没有必要的,因为它返回void指针但是, calloc怎么样。 这也是calloc的原因???
现在,如果我们回到第一点,关于malloc和calloc的返回值。 然后,我发现两者都返回分配的空格 。 所以,我在这里有点困惑。 所以,我的问题是
malloc和calloc的返回值是多少?
是否有必要输入malloc和calloc 。 为什么?
malloc和calloc的返回值是多少?
它是一个指向void
( void*
)的指针。
是否有必要输入malloc和calloc。 为什么?
不,因为从指针到void
到指向对象的指针的转换是隐式的。
C11(n1570),§6.3.2.3指针
指向void
的指针可以转换为指向任何对象类型的指针。
它适用于malloc
和calloc
。
malloc()
或calloc()
返回void *
,它可以分配给任何指针类型。在C中没有必要对void*
进行类型转换,因为它是由编译器隐式完成的。但是如果你不进行类型转换,它会给你错误
malloc
和calloc
的返回值是void*
。 这些函数分配的堆内存空间的地址。
两个函数都分配内存。 他们之间的唯一区别是
- malloc只是分配内存。
- calloc分配内存并将其初始化为0。
在C中,不建议转换这些函数的返回值。
在C ++中,必须进行强制转换。
malloc()和calloc()的返回值是多少?
void *malloc(size_t size); void *calloc(size_t nmemb, size_t size);
void*
由两个函数返回。
是否有必要输入malloc和calloc。 为什么?
不。不需要进行类型转换。 malloc()
和calloc()
函数返回一个指向已分配内存的指针,该内存适合于任何类型的变量。 出错时,这些函数返回NULL
。 通过成功调用大小为零的malloc()
,或通过成功调用nmemb
或大小等于零的calloc()
,也可以返回NULL
。