【问题标题】:what is the difference between these two malloc declarations? [duplicate]这两个 malloc 声明有什么区别? [复制]
【发布时间】: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


【解决方案1】:

第二种情况不是首选,不需要演员表。使用第一种语法。

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2015-12-22
    • 2015-06-07
    • 2012-04-01
    • 2015-02-17
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多