我将在c中有一个数组数组,因为主数组中的每个数组都有一个特定的大小。例如: { {A,B,C}, {一个}, {广告} } 问题是我不想使用堆内存并使用" malloc",它也不应该是任何浪费的内存。例如,我不想使用以下代码:
char myArrays[][3] = {
{a,b,c},
{a,null,null},
{a,d,null}
}
答案 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');
}
答案 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在幕后使用堆内存。
但这是我能想到的最接近你所要求的。