我想知道是否可以在 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)
如果可能,怎么做?就像普通的二维数组一样?
不同大小的数组在 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)