关于C#:malloc需要进行类型转换吗?

Is typecast required in malloc?

本问题已经有最佳答案,请猛点这里访问。

在malloc中,typecast的用法是什么?如果我不在malloc中写打字,它会返回什么?(为什么在malloc中需要打字?)


我想你的意思是:

int *iptr = (int*)malloc(/* something */);

在C语言中,您不必(也不应该)从malloc转换返回指针。它是一个void *,在c中,它被隐式转换为另一个指针类型。

int *iptr = malloc(/* something */);

是首选格式。

这不适用于C++,它不共享相同的EDCOX1×2的隐式抛出行为。


您不应将malloc()的返回值用c表示。这样做是:

  • 不需要,因为void *与任何其他指针类型兼容(函数指针除外,但此处不适用)。
  • 潜在危险,因为它可以隐藏错误(缺少函数声明)。
  • 凌乱,强制转换很长,而且常常很难读取,所以它只会使代码更丑。

所以:没有好处,至少有三个缺点,所以应该避免。


您不需要强制转换malloc的返回值。这将在C FAQ:http://c-faq.com/malloc/cast.html和http://c-faq.com/malloc/mallonocast.html中进一步讨论。


仅仅因为malloc返回一个void,并且由于void*没有定义大小,所以不能对它应用指针算术。因此,通常将指针强制转换为分配的内存块实际指向的数据类型。


答案是正确的,我只是有个建议:

  • 不要玩指针(malloc()返回的指针)太多,尽快将它们强制转换为指定的类型;
  • 如果需要对它们进行一些数学运算,请将它们强制转换为char*,这样ptr++就意味着除了:向其中添加1(将添加数据类型的大小,其中char的大小为1)。