【问题标题】:return of malloc() functionmalloc() 函数的返回
【发布时间】:2017-07-30 10:25:51
【问题描述】:

malloc() 函数被称为返回一个空指针或一个指向分配空间的指针。假设我们对一个字符串做出这样的声明:

char* ptr =  malloc(size)  

ptr 不是指向指针的指针吗?
不是:

char** ptr = malloc(size)  

应该是声明指向char的指针的正确方法?

但是,当我们这样做时,编译器也不会发出警告,它发出的警告是针对格式说明符(如果使用)。

我们应该如何声明它,为什么?另外,如何使用 char**?

【问题讨论】:

  • @Jean-FrançoisFabre 这不是一个有效的 upe,我猜。
  • 我应该阅读文本,而不仅仅是代码。

标签: c pointers


【解决方案1】:

不,“ptr”将包含“malloc”返回的指针。您正在分配返回的指针,而不是获取它的地址。

【讨论】:

    【解决方案2】:

    char * 表示一个字符指针。 Malloc 将返回一个void * 指针(它将自动转换为您尝试分配的任何指针)。

    char ** 表示char * 指针。这是一个指向指针的指针。

    如果您将指针视为一个映射,您会发现char * 是一个字符映射,void * 是一个神秘事物的映射,char ** 是另一个指向一个字符的映射的映射。所以

    char* ptr = malloc(size);
    

    是正确的,因为您想要映射到某物,而不是映射到地图。

    【讨论】:

    • 您应该说“自动转换”,而不是“强制转换”,以避免与作为显式转换的强制转换的含义混淆。
    • @NomeQueEuLembro , cast** 将如何与 malloc() 或 calloc() 一起使用,您能否提供一个示例?
    • 谢谢,@trentcl!固定。
    • @BumbleBee 假设您要分配一个大小为 NxN 的 2D 整数网格。您可以使用 int ** grid = malloc(N*sizeof * grid)。您仍然必须使用循环单独分配网格的每一行。
    【解决方案3】:
    • *ptr是指向char的指针,常用于管理数组 或字符串。

    • **ptr是指向char的指针,常用于
      管理矩阵(数组数组)或字符串数​​组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      相关资源
      最近更新 更多