如何为指向char *数组的指针分配内存?

时间:2012-01-20 04:34:48

标签: c memory multidimensional-array allocation

有人可以解释如何正确地为c指向字符指针数组的指针分配内存吗?例如:

char *(*t)[];

我尝试这样做:

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

这给了我一个编译错误:

error: invalid use of array with unspecified bounds

对此的任何帮助都会很棒!感谢

4 个答案:

答案 0 :(得分:4)

你能做的是:

char **t = (char**)malloc( <no of elements> * sizeof(char*));

分配指针数组。

for (i = 0 ; i< <no of elements> ; i++)
{
    t[i] = (char*)malloc( <length of text> * sizeof(char));
}

为数组的每个元素指向的文本分配内存。

答案 1 :(得分:2)

当人们说“指向X数组的指针”时,通常它们实际上是指向 X数组的第一个元素的指针。指针到数组的类型非常笨重在C中,通常只出现在多维数组中。

话虽如此,您想要的类型只是char **

char **t = malloc(num_elems * sizeof *t);

使用指针到数组的类型,它看起来像:

char *(*t)[num_elems] = malloc(sizeof *t);

请注意,除非num_elems整数常量表达式,否则这将是C99可变长度数组类型。

答案 2 :(得分:0)

这取决于你希望如何分配它,但这是一种方式。

char** myPointer = malloc(sizeof(char *) * number_Of_char_pointers)
int i;
for(i = 0; i <  number_Of_char_pointers; i++)
{
     myPointer[i] = malloc(sizeof(char) * number_of_chars);
}
需要注意的是,当用于取消引用变量时,myPointer [i]与说*(myPointer + i)几乎完全相同,而不是在初始化期间。

答案 3 :(得分:-2)

试试这个:

int main()
{
    char** a = new char* [100];
    delete []a;
    return 0;
}