malloc中的typecast的用法是什么?如果我不在malloc中编写类型转换,那么它会返回什么? (?为什么在malloc的类型转换需要)malloc中是否需要类型转换?
5
A
回答
12
我假定你的意思是这样的:
int *iptr = (int*)malloc(/* something */);
而在C,你不必(也不应该)从malloc
转换返回指针。这是一个void *
在C中,它被隐式转换为另一个指针类型。
int *iptr = malloc(/* something */);
是优选的形式。
这不适用于C++,它不共享相同的void *
隐式强制转换行为。
1
仅仅因为malloc返回void
*,并且由于void*
尚未定义大小,所以不能将指针指针应用于它。所以你通常把指针指向你分配的内存块实际指向的数据类型。
5
你不应该投的malloc()
的返回值,在C这样做是:
- 不必要的,因为
void *
与任何其他指针类型(除函数指针兼容,但在这里不适用)。 - 潜在危险,因为它可以隐藏错误(缺少函数声明)。
- 混乱,铸造很长,往往难以阅读,所以它只是使代码丑陋。
所以:没有好处,至少有三个缺点,因此应该避免。
0
的答案是正确的,我只是有一个建议:
- 不玩的指针 - 这的malloc()回报 - 太多了,他们投以尽快指定类型;
- 如果你需要对它们进行一些数学运算,将它们转换成char *,所以ptr ++将意味着除了你以外的所有东西:加1(数据类型的大小将被加1,char)。
3
您不是需要才能投出返回值malloc
。这在C FAQ中进一步讨论:http://c-faq.com/malloc/cast.html和http://c-faq.com/malloc/mallocnocast.html。
你能解释清楚吗? – user615929 2011-02-14 15:37:00
@ user615929 - 你需要更清楚地解释什么?您不需要将`void *`从`malloc`中强制转换,因为它可以自由地隐式转换为其他指针类型。 – birryree 2011-02-14 15:39:52