C中每行具有不同大小的二维数组

Max*_*sse 1 c jagged-arrays

我想知道是否可以在 C 中创建一个具有不同大小线的二维数组。

我知道二维数组是一个存储其他数组的数组。但是如果数组的大小不同呢?像这样的东西(“T”是数组的可用位置)

   0  1  2  3  4
0  T  T  
1  T  T  T  T  T
2  T  T  T
3  T  T  T  T  
Run Code Online (Sandbox Code Playgroud)

如果可能,怎么做?就像普通的二维数组一样?

Ser*_*sta 6

不同大小的数组在 C 中是可能的。简单地说,它们不是二维数组,而是数组或指针。您将在C 标签常见问题解答中找到有关该答案差异的更多信息。

@vahero 已经展示了如何动态分配它,但也可以使用静态或自动存储:

char row0[] = "TT";      // size 3 because of the terminating null...
char row1[] = "TTTTT";
char row2[] = "TTT";
char row3[] = "TTTT";
char* array[] = { row0, row1, row2, row3};
Run Code Online (Sandbox Code Playgroud)

或者没有额外的变量标识符:

char *arr[] = { 
    (char[]){ 'T', 'T', 0 },
    (char[]){ 'T', 'T', 'T', 'T', 'T', 0 },
    (char[]){ 'T', 'T', 'T', 0 },
    (char[]){ 'T', 'T', 'T', 'T', 0 },
};
Run Code Online (Sandbox Code Playgroud)

然后你可以像往常一样使用:

for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++) {
    for(int j=0; arr[i][j] != '\0'; j++) {
        printf("%c ", arr[i][j]);
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)