2011-02-14 79 views

回答

12

我假定你的意思是这样的:

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

而在C,你不必(也不应该)从malloc转换返回指针。这是一个void *在C中,它被隐式转换为另一个指针类型。

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

是优选的形式。

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

+0

你能解释清楚吗? – user615929 2011-02-14 15:37:00

+0

@ user615929 - 你需要更清楚地解释什么?您不需要将`void *`从`malloc`中强制转换,因为它可以自由地隐式转换为其他指针类型。 – birryree 2011-02-14 15:39:52

1

仅仅因为malloc返回void *,并且由于void*尚未定义大小,所以不能将指针指针应用于它。所以你通常把指针指向你分配的内存块实际指向的数据类型。

5

你不应该投的malloc()的返回值,在C这样做是:

  • 不必要的,因为void *与任何其他指针类型(除函数指针兼容,但在这里不适用)。
  • 潜在危险,因为它可以隐藏错误(缺少函数声明)。
  • 混乱,铸造很长,往往难以阅读,所以它只是使代码丑陋。

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

0

的答案是正确的,我只是有一个建议:

  • 不玩的指针 - 这的malloc()回报 - 太多了,他们投以尽快指定类型;
  • 如果你需要对它们进行一些数学运算,将它们转换成char *,所以ptr ++将意味着除了你以外的所有东西:加1(数据类型的大小将被加1,char)。