为什么malloc前面有(void *)?

时间:2012-04-14 19:56:15

标签: c++ function

void* buffer = (void*)malloc(100);

通过为malloc()函数添加前缀(void *),实现了什么,我们是否覆盖了返回类型?

3 个答案:

答案 0 :(得分:6)

由于malloc已经返回一个void指针,因此无法实现。这相当于:

void* buffer = malloc(100);

答案 1 :(得分:4)

malloc的调用的返回类型被显式转换为void指针。这有点多余,因为它已经返回void*,但是可能可能存在以澄清开发人员的意图(或者他刚搞砸了)。

答案 2 :(得分:4)

在这种特殊情况下,它什么都不做。但是,由于C ++对于类型安全比C更严格,因此通常需要转换malloc的返回值:

void* x = malloc(100);       //OK in C/C++
int*  y = malloc(100);       //OK in C, error in C++
int*  z = (int*)malloc(100); //OK in C/C++, not recommended for C

但是,由于您使用C ++,我不能告诉您应该使用new代替。