我需要为需要用作2d数组的指针分配内存。我知道如何为char指针和int指针分配内存我很困惑如何为指针数组分配内存。图形表示原因是非常有帮助的,下面的代码也不错吗?
char *names[5];
for(i=0;i<5;i++)
{
names[i]=(*char)malloc(sizeof(char));
}
答案 0 :(得分:11)
不,这不是因为您正在分配数组,假设维度只有1个基本类型char元素(即1个字节)。
我假设您要在names
内分配5个指针,但只是指针。
您应该根据指针的大小乘以元素的数量来分配它:
char **names = malloc(sizeof(char*)*5);
您不需要使用循环逐个分配它们。请注意,您需要使用**
答案 1 :(得分:1)
你正在做的是为5个字符分配空间。你可以写这个,它会有相同的结果:
char *names = (char *)malloc(sizeof(char) * 5);
如果你想拥有一个指针数组,我认为这是最好的代码
char **names = (char **)malloc(sizeof(char *) * 5);
我不是超级编码员,但正如我现在所说,这是正确的解决方案。
答案 2 :(得分:0)
此外,简而言之,在这种情况下,您也可以执行以下操作,为五个字符分配存储空间
names = (char*)malloc(5 * sizeof(char))
答案 3 :(得分:0)
强调杰克最后所说的内容:只有在使用**将数组声明为指针指针时,他的代码才有效。
当数组声明为
时char *names[5];
我猜分配内存的正确方法几乎与Ak1一样,但乘以字符串所需的大小:
char *names[5];
for(i=0;i<5;i++)
{
names[i]=(char *)malloc(sizeof(char)*80);
}
否则编译器会抛出有关不兼容类型的错误。