malloc需要类型转换吗?

malloc中使用类型转换有什么用? 如果我不在malloc中编写类型转换,它会返回什么? (为什么malloc需要进行类型转换?)

我猜你的意思是这样的:

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

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

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

是首选forms。

这不适用于C ++,它不共享相同的void *隐式强制转换行为。

你永远不应该在C中malloc()的返回值。这样做是:

  • 不必要,因为void *与任何其他指针类型兼容(函数指针除外,但这里不适用)。
  • 有潜在危险,因为它可以隐藏错误(缺少函数声明)。
  • 混乱,演员阵容很长,往往难以阅读,所以它只会使代码变得更加丑陋。

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

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

只是因为malloc返回一个void *并且因为void*没有定义大小,所以你不能在它上面应用指针aritmetic。 因此,您通常将指针强制转换为分配的内存块实际指向的数据类型。

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

  • 不要使用指针 – malloc()返回 – 太多,将它们转换为指定的类型asap;
  • 如果你需要用它们做一些数学运算,把它们转换为char *,那么ptr ++将意味着你除了:向它添加1(将添加数据类型的大小,对于char为1)。