9

可能重复:
我要转换 malloc 的结果吗?

我在谷歌上搜索找出malloccalloc类型转换的原因。但是,我只发现malloc的类型转换是不必要的,因为它返回 void 指针,但是calloc呢。这也是calloc的原因???

现在,如果我们回到第一点,关于malloccalloc的返回值。然后,我发现,两者都返回了分配的空间。所以,我在这里有点困惑。所以,我的问题是

  1. malloccalloc的返回值是多少

  2. 是否有必要对malloccalloc进行类型转换。为什么?

4

4 回答 4

12

malloc 和 calloc 的返回值是多少?

它是指向void( void*) 的指针。

是否有必要对 malloc 和 calloc 进行类型转换。为什么?

不,因为从void指针到对象指针的转换是隐式的。

C11 (n1570), § 6.3.2.3 指针指向
的指针void可以转换为指向任何对象类型的指针或从指向任何对象类型的指针转​​换。

它适用于malloccalloc

于 2012-11-08T11:14:07.130 回答
3

malloc()或可以分配给任何指针类型的calloc()返回值。在 C 中,没有必要进行类型转换,因为它是由编译器隐式完成的。但是在 C++ 中,如果你不进行类型转换,它会给你错误void *void*

于 2012-11-08T11:14:34.263 回答
1

malloc() 和 calloc() 的返回值是多少?

void *malloc(size_t size);
void *calloc(size_t nmemb, size_t size);

void*由两个函数返回。

是否有必要对 malloc 和 calloc 进行类型转换。为什么?

不,不需要类型转换。malloc()and函数返回一个指向已分配内存的指针,该calloc()指针适合任何类型的变量对齐。出错时,这些函数返回NULL. NULL也可以通过 malloc()大小为零的成功调用返回,或者通过成功调用calloc()with nmembor size 等于 0 来返回。

于 2012-11-08T11:13:14.903 回答
1

malloc和的返回值calloc是一个void*。这些函数分配的堆内存空间的地址。

这两个函数都分配内存。它们之间的唯一区别是

  • malloc 只是分配内存。
  • calloc 分配内存并将其初始化为 0。

在 C 中,不建议强制转换这些函数的返回值。

在 C++ 中强制转换。

于 2012-11-08T11:15:59.517 回答