malloc中使用类型转换有什么用?如果我不在malloc中编写类型转换,那么它将返回什么? (为什么malloc需要进行类型转换?)
答案 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.html和http://c-faq.com/malloc/mallocnocast.html。
答案 3 :(得分:1)
因为malloc返回void
*并且由于void*
没有定义大小,所以不能在其上应用指针aritmetic。因此,您通常将指针强制转换为分配的内存块实际指向的数据类型。
答案 4 :(得分:0)
答案是对的,我只是有一个建议: