C中malloc和(int *)malloc之间的区别

时间:2014-01-15 19:57:15

标签: c malloc

(这里总新手。)根据我的理解,如果我在C中编写以下代码:

p = malloc(sizeof(int));

这意味着我要求计算机为我保留4个字节的内存,并将p分配给该4字节内存块的第一个字节的地址值。

在computer.howstuffworks.com/c29.htm,我们改为:

p = (int *)malloc(sizeof(int));

这有什么不同?

3 个答案:

答案 0 :(得分:4)

的区别;请参阅此处进行全面讨论:Do I cast the result of malloc?

最重要的一点是,如果忘记#include <stdlib.h>没有演员表,则施法可以隐藏错误,这是一个错误。使用强制转换,但没有包含,C将假定malloc()返回int,它可能与指针的大小不同。在这种情况下,实函数的返回值将被切断(如果指针比64 {1}机器上的int长)并导致指针无效。

答案 1 :(得分:1)

malloc返回void *,这是可以的,因为将void *转换为另一种指针类型是安全且自动的。第二种情况不必要地将malloc的结果转换为int *,你不应该转换malloc的结果,因为它可以隐藏错误消息而不是必需的。例如,如果您忘记包含stdlib.h,则会看到类似于以下内容的警告:

  

初始化使得指针来自整数而没有强制转换

因为在许多编译器中malloc将被隐式声明为返回int

答案 2 :(得分:1)

malloc默认返回void*

在第二种情况下,您将其投射到int*

注意:在C中你不必进行演员表演。也就是说,这两个陈述是100%等价的:

char *x = malloc(100);
 char *y = (char *)malloc(100);

来自void *的转换隐含在C中。

相关问题