不你没有投出结果,因为:
void *会自动安全地提升为任何其他指针类型。 <stdlib.h>它可以隐藏错误。这可能会导致崩溃(或更糟的是, 不导致崩溃,直到方式在后面的代码的一些完全不同的部分)。考虑如果指针和整数的大小不同会发生什么; 然后你通过强制转换隐藏了一个警告,可能会丢失你返回的地址。注意:从 C11 开始,隐式函数从 C 中消失,并且这一点不再相关,因为没有自动假设未声明的函数返回int 。 作为澄清,请注意我说 “你不投”,而不是 “你不需要投”。在我看来,即使你做对了也没有包括演员。这样做没有任何好处,但是一堆潜在的风险,包括演员表明你不知道风险。
还要注意,正如评论员指出的那样,上面谈到的是直 C,而不是 C ++。我非常坚信 C 和 C ++ 是不同的语言。
要进一步添加,您的代码会不必要地重复可能导致错误的类型信息( int )。最好取消引用用于存储返回值的指针,将两者 “锁定” 在一起: 
int *sieve = malloc(length * sizeof *sieve);这也将length移到前面以增加可见性,并使用sizeof删除多余的括号; 只有在参数是类型名称时才需要它们。许多人似乎不知道(或忽略)这一点,这使得他们的代码更加冗长。请记住: sizeof不是函数! :) 
虽然在某些极少数情况下向前移动length 可能会增加可见性,但是在一般情况下,应该注意将表达式编写为: 
int *sieve = malloc(sizeof *sieve * length);由于首先保持sizeof ,在这种情况下,确保乘法至少使用size_t数学。 
比较: malloc(sizeof *sieve * length * width)与malloc(length * width * sizeof *sieve)当width和length小于size_t时,第二个可能会溢出length * width 。 
在 C 中,您不需要转换malloc的返回值。 malloc返回的 void 指针自动转换为正确的类型。但是,如果您希望使用 C ++ 编译器编译代码,则需要进行强制转换。社区中的首选替代方案是使用以下内容: 
int *sieve = malloc(sizeof *sieve * length);如果您改变sieve的类型,这使您不必担心改变表达式的右侧。 
人们已经指出,演员阵容很糟糕。特别是指针转换。
你做演员,因为:
type *与type **的 SO 示例。 #include一个合适的头文件的想法错过了树的森林 。这就像说 “不要担心你没有要求编译器抱怨没有看到原型这一事实 - 那令人讨厌的 stdlib.h 是真正重要的事情要记住!” malloc()错误会被捕获得更快。与断言一样,显示意图的注释可以减少错误。