返回malloc()函数

返回malloc()函数,c,pointers,C,Pointers,malloc()函数用于返回空指针或指向分配空间的指针。假设我们对一个字符串做如下声明: char* ptr = malloc(size) ptr不是指向指针的指针吗? 不是: char** ptr = malloc(size) 应该是声明指向char的指针的正确方法吗 然而,当我们这样做时,编译器也不会给出警告,它给出的警告是针对格式说明符(如果使用) 我们应该如何申报,为什么?另外,如何使用char** 否,'ptr'将包含由'malloc'返回的指针。您正在分配返回的指针,而

malloc()函数用于返回空指针或指向分配空间的指针。假设我们对一个字符串做如下声明:

char* ptr =  malloc(size)  
ptr
不是指向指针的指针吗?
不是:

char** ptr = malloc(size)  
应该是声明指向char的指针的正确方法吗

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


我们应该如何申报,为什么?另外,如何使用char**

否,'ptr'将包含由'malloc'返回的指针。您正在分配返回的指针,而不是获取其地址。

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

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

如果你认为指针是一个映射,那么
char*
是一个到char的映射,
void*
是一个到神秘事物的映射,
char**
是一个到另一个映射的映射,该映射指向一个char。所以

char* ptr = malloc(size);
是正确的,因为您想要的是指向某物的地图,而不是指向地图的地图。

  • *ptr
    是指向字符的指针,通常用于管理数组 或者一根绳子

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


您应该说“自动转换”,而不是“强制转换”,以避免混淆强制转换作为显式转换的含义。@nomequeuelambro,如何将强制转换**与malloc()或calloc()一起使用,请提供一个示例?谢谢,@trentcl!修正了。@BumbleBee假设您想要分配一个大小为NxN的2D整数网格。您可以使用int**grid=malloc(N*sizeof*grid)。你仍然需要用循环单独分配网格的每一行。@Jean-Françoisfare我想这不是一个有效的upe。我应该阅读文本,而不仅仅是代码。