【发布时间】:2020-07-22 02:40:29
【问题描述】:
这两个malloc函数有什么区别?
char *s; //declaration
--> s = malloc(1024 * sizeof(char));
--> s=(char *)malloc(1024*sizeof(char));
这里也一样,如果 malloc 函数已经在 char 中声明,我们需要对它进行类型转换
【问题讨论】:
-
这能回答你的问题吗? Do I cast the result of malloc?
-
你从来没有投过malloc的返回值,所以第一个版本是正确的。在不相关的注释中,您可以使用另一种语法来指定大小:sizeof(char[1024])。与 malloc 没有任何关系,只是我个人比较喜欢的一点语法糖
-
malloc()返回一个void*,它在 C 中隐式转换为int*,因此它没有任何区别,因此第二行是多余的,只不过是编写代码更难阅读。不相关,但是,在 C++ 的情况下,您需要实际转换malloc()的结果,这是不同的,因为 C++ 不允许将void*隐式转换为int*。 -
@FelixG:我也喜欢这种语法,但如果大小不是编译时常量,它只适用于实现可变长度数组 (VLA) 的编译器。 VLA 是当前 C 标准中的一个可选功能,这要归功于显然对实现该功能没有兴趣的供应商的游说。
标签: c string pointers malloc character