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

rez*_*esh 0 c arrays

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

char myArrays[][3] = {
 {a,b,c},
 {a,null,null},
 {a,d,null}
} 
Run Code Online (Sandbox Code Playgroud)

das*_*ght 6

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

char *myArrays[] = {
    (char[]){'a','b','c'},
    (char[]){'a'},
    (char[]){'a','d'}
};
Run Code Online (Sandbox Code Playgroud)

您不需要使用空字符"填充"数组.

请注意,这种方法不能提供一种简单的方法来找出内部数组的确切长度:sizeof运算符不起作用.如果你想知道内部数组的长度,可以添加某种终止条目(比方说,'\0's)或添加一个长度数组,如下所示:

size_t myLengths[] = {3, 1, 2};
Run Code Online (Sandbox Code Playgroud)

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

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

在ideone上演示.

  • 为了澄清那些过去15年来一直生活在岩石下的人:这个解决方案使用了C99标准引入的_compound literals_的C概念.(虽然没有必要使用它们,但你也可以将每个数组声明为一个单独的变量并获得相同的结果.) (3认同)