malloc需要类型转换吗?

时间:2011-02-14 14:29:16

标签: c casting malloc

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

5 个答案:

答案 0 :(得分:12)

我认为你的意思是这样的:

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

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

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

是首选表格。

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:3)

您不是必需来转换malloc的返回值。这在C FAQ中进一步讨论:http://c-faq.com/malloc/cast.htmlhttp://c-faq.com/malloc/mallocnocast.html

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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