在这个问题 ,有人建议意见 ,我不应该投的结果malloc
,即 html
int *sieve = malloc(sizeof(int) * length);
而不是: 程序员
int *sieve = (int *) malloc(sizeof(int) * length);
为何会这样呢? 编程
强制转换malloc
的结果不是强制性的,由于它返回void*
,而且void*
能够指向任何数据类型。 编程语言
您进行强制转换是由于: spa
type *
与type **
。 #include
适当的头文件的想法错过了树木的森林 。 就像说“没必要担忧您没有要求编译器抱怨没有看到原型的事实-讨厌的stdlib.h是要记住的真正重要的事情!” malloc()
错误的捕获速度要快得多。 与断言同样,揭示意图的注释会减小错误。 返回的类型为void *,能够将其强制转换为所需的数据指针类型,以便将其取消引用。 指针
如今不须要malloc()
返回的值,可是我想补充一点,彷佛没有人指出: code
在古代,也就是在ANSI C提供void *
做为指针的通用类型以前, char *
是此类用法的类型。 在这种状况下,强制转换能够关闭编译器警告。 htm
参考: C常见问题解答 get
这取决于编程语言和编译器。 若是在C中使用malloc
,则无需键入强制转换,由于它将自动键入强制转换。可是,若是您使用C ++,则应键入强制转换,由于malloc
将返回void*
类型。 原型