指针数组的内存分配

我需要为需要用作2d数组的指针分配内存。我知道如何为char指针和int指针分配内存我很困惑如何分配指针数组的内存。原因的图形表示非常有帮助,下面的代码也很好吗?

char *names[5]; for(i=0;i<5;i++) { names[i]=(*char)malloc(sizeof(char)); } 

不,这不是因为您正在分配数组,假设维度只有1个元素的原始类型char(即1个字节)。

我假设您想要在names分配5个指针,但只是指针。

您应该根据指针的大小乘以元素的数量来分配它:

 char **names = malloc(sizeof(char*)*5); 

您不需要使用循环逐个分配它们。 请注意,您需要使用**指定它是一个指针指针

你正在做的是为5个字符分配空间。 你可以写这个,它会有相同的结果:

 char *names = (char *)malloc(sizeof(char) * 5); 

如果你想拥有一个指针数组,我认为这将是最好的代码

 char **names = (char **)malloc(sizeof(char *) * 5); 

我不是超级编码员,但正如我现在所说,这是正确的解决方案。

此外,简而言之,在这种情况下,您也可以执行以下操作,以便为五个字符分配存储空间

names = (char*)malloc(5 * sizeof(char))

强调杰克最后所说的内容:只有在使用**将数组声明为指针指针时,他的代码才有效。

当数组声明为

 char *names[5]; 

我猜分配内存的正确方法几乎与Ak1一样,但乘以字符串所需的大小:

 char *names[5]; for(i=0;i<5;i++) { names[i]=(char *)malloc(sizeof(char)*80); } 

否则编译器会抛出有关不兼容类型的错误。