malloc和(int *)malloc在C中的区别

这个问题在这里已经有了答案:

  • 我输入malloc的结果吗? 27个答案

  • 有区别的; 请参阅此处以进行全面讨论:我是否投射了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

    链接地址: http://www.djcxy.com/p/28433.html

    上一篇: Difference between malloc and (int *)malloc in C

    下一篇: When do I need to cast the result of malloc in C language?