malloc需要类型转换吗?

use*_*929 5 c malloc casting

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

wkl*_*wkl 12

我猜你的意思是这样的:

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

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

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

是首选形式.

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

  • @ user615929 - 在C中,指向`void`(`void*`)的指针可以在没有强制转换的情况下转换为任何其他指针类型,这与指向其他类型的指针不同(例如,将`char*`类型的值赋值给变量of类型`int*`**需要显式转换).因此,`malloc`返回的值将自动转换为目标指针类型,不需要强制转换.请注意,在*非常旧的*(1989年之前)版本的C中,`malloc`返回了`char*`,因此如果您将结果赋值给不同类型的变量,则显式强制转换*是必需的. (2认同)

unw*_*ind 5

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

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

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