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



(这里的新手总数。据我了解,如果我用 C 编写以下内容:

p = malloc(sizeof(int));

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

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

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

这有何不同?

有区别;请参阅此处进行完整讨论:我是否投射 malloc 的结果?

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

> 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

相关内容

  • 没有找到相关文章

最新更新