是否有必要对malloc和calloc进行类型转换

时间:2012-11-08 11:11:35

标签: c malloc calloc

  

可能重复:
  Do I cast the result of malloc?

我在谷歌上搜索 malloc calloc 的输入原因。但是,我只发现 malloc 的类型转换,因为它返回void指针,但是, calloc 呢?这与 calloc 的原因相同???

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

  
      
  1. malloc calloc

  2. 的返回值是多少?   
  3. 是否需要输入 malloc calloc 。为什么?

  4.   

4 个答案:

答案 0 :(得分:7)

  

malloc和calloc的返回值是什么?

它是指向voidvoid*)的指针。

  

是否需要输入malloc和calloc。为什么?

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

  

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

适用于malloccalloc

答案 1 :(得分:2)

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

答案 2 :(得分:1)

  

malloc()和calloc()的返回值是什么?

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

void*由两个函数返回。

  

是否需要输入malloc和calloc。为什么?

没有。它不需要进行类型转换。 malloc()calloc()函数返回指向已分配内存的指针,该内存适合于任何类型的变量。出错时,这些函数返回NULL。成功调用大小为零的NULL,或成功调用malloc() calloc()或大小等于零,也可以返回nmemb

答案 3 :(得分:1)

malloccalloc的返回值为void*。这些函数分配的堆内存空间的地址。

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

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

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

在C ++中,必须强制转换。