如何在c中创建不同大小的数组?

时间:2014-06-25 11:37:25

标签: c arrays

我将在c中有一个数组数组,因为主数组中的每个数组都有一个特定的大小。例如:     {      {A,B,C},      {一个},      {广告}     }  问题是我不想使用堆内存并使用" malloc",它也不应该是任何浪费的内存。例如,我不想使用以下代码:

char myArrays[][3] = {
 {a,b,c},
 {a,null,null},
 {a,d,null}
} 

3 个答案:

答案 0 :(得分:6)

如果你想创建一个不同大小的数组数组,你需要创建一个指针数组,如下所示:

char *myArrays[] = {
    (char[]){'a','b','c'},
    (char[]){'a'},
    (char[]){'a','d'}
};

您不需要使用空字符“填充”数组。

请注意,此方法无法轻松找出内部数组的确切长度:sizeof运算符无法正常工作。如果你想知道内部数组的长度,可以添加某种终止条目(比如'\0' s)或添加一个长度数组,如下所示:

size_t myLengths[] = {3, 1, 2};

现在你可以像这样迭代数组数组:

for (int i = 0 ; i != 3 ; i++) {
    for (int j = 0 ; j != myLengths[i] ; j++) {
        putchar(myArrays[i][j]);
    }
    putchar('\n');
}

Demo on ideone.

答案 1 :(得分:0)

声明一个指针数组:

char* ptrArray [] =
{
  array1,
  array2,
  ...
};

要跟踪它们各自的大小,要么声明另一个包含大小的相同大小的数组,要么将数组嵌入到结构中,其中大小是一个成员,指向另一个数组的指针。

答案 2 :(得分:-1)

现在在C ++中你可以创建一个向量的向量。如下所示。

std::vector< std::vector<char> > myArrays;
myArrays.resize(3);
myArrays[0].resize(3);
myArrays[1].resize(1);
myArrays[2].resize(2);

但这是C ++而不是C.此外,std :: vector在幕后使用堆内存。

但这是我能想到的最接近你所要求的。