malloc和(int *)malloc在C中的区别
这个问题在这里已经有了答案:
是有区别的; 请参阅此处以进行全面讨论:我是否投射了malloc的结果?
最重要的一点是,如果您忘记了#include <stdlib.h>
那么cast可以隐藏一个错误。如果没有cast,这是一个错误。 对于cast,但没有include,C会假定malloc()
返回一个int
,它的大小可能与指针不一样。 在这种情况下,真实函数的返回值将被切断(如果指针比64位机器上的int
长)并导致无效指针。
malloc默认返回一个void*
。
在第二种情况下,你将它转换为int*
注意:在C中,你不必做演员。 也就是说,这两个陈述是100%等价的:
char *x = malloc(100);
char *y = (char *)malloc(100);
来自void *的转换在C中是隐含的
malloc
返回一个void *
,这是可以的,因为它是安全和自动的将void *
转换为另一个指针类型。 第二种情况不必要地将malloc
的结果转换为int *
并且不应该使用malloc
的结果,因为它可以隐藏错误消息而不是必需的。 例如,如果您忘记包含stdlib.h
您应该看到类似于以下内容的警告:
初始化使得整型指针没有强制转换
因为在许多编译器中, malloc
将被隐式声明为返回int
。
上一篇: Difference between malloc and (int *)malloc in C
下一篇: When do I need to cast the result of malloc in C language?