malloc需要类型转换吗?
malloc中使用类型转换有什么用? 如果我不在malloc中编写类型转换,它会返回什么? (为什么malloc需要进行类型转换?)
我猜你的意思是这样的:
int *iptr = (int*)malloc(/* something */);
在C中,您不必(也不应该)从malloc
返回指针。 它是一个void *
,在C中,它被隐式转换为另一个指针类型。
int *iptr = malloc(/* something */);
是首选forms。
这不适用于C ++,它不共享相同的void *
隐式强制转换行为。
你永远不应该在C中malloc()
的返回值。这样做是:
- 不必要,因为
void *
与任何其他指针类型兼容(函数指针除外,但这里不适用)。 - 有潜在危险,因为它可以隐藏错误(缺少函数声明)。
- 混乱,演员阵容很长,往往难以阅读,所以它只会使代码变得更加丑陋。
所以:没有任何好处,至少有三个缺点,因此应该避免。
您不需要 malloc
的返回值。 这将在C FAQ中进一步讨论: http : //c-faq.com/malloc/cast.html和http://c-faq.com/malloc/mallocnocast.html 。
只是因为malloc返回一个void
*并且因为void*
没有定义大小,所以你不能在它上面应用指针aritmetic。 因此,您通常将指针强制转换为分配的内存块实际指向的数据类型。
答案是正确的,我只是有一个建议:
- 不要使用指针 – malloc()返回 – 太多,将它们转换为指定的类型asap;
- 如果你需要用它们做一些数学运算,把它们转换为char *,那么ptr ++将意味着你除了:向它添加1(将添加数据类型的大小,对于char为1)。