在C中使用malloc时是否需要类型转换?

Dan*_*cco 4 c malloc types casting

可能重复:
我是否转换了malloc的结果?

我刚学会了如何使用malloc函数,我的老师提到在将内存地址传递给指针时需要进行类型转换.例如,这是使用malloc获取16个新字节(4个整数)的代码:

#include <stdlib.h>

int main(){
   int *p;
   p = (int *)malloc(4*sizeof(int));

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题:是否需要在归属的右侧投射(int*)?毕竟p已经是一个指向int的指针,所以即使没有该转换,指针算术也应该正常工作.

谢谢

Pau*_*l R 5

如果在C++代码中使用malloc,则只需要强制转换.

对于C,最好使用强制转换,因为它是(a)不必要的,(b)可以掩盖编译器报告的问题.

  • 然后,它是C++,除非你知道你在做什么,否则最好使用`new`. (2认同)
  • 此外,通过编写`p = malloc(4*sizeof*p);`可以使代码更加健壮. (2认同)