C 二维阵列,其中较大的阵列是动态的,较小的阵列不是动态的

C 二维阵列,其中较大的阵列是动态的,较小的阵列不是动态的,c,C,在C语言中,如果我不知道编译时的行数,但知道列数,如何初始化数组 如果我想要一个非动态分配的数组,我输入int2d_数组[128][128]

在C语言中,如果我不知道编译时的行数,但知道列数,如何初始化数组

如果我想要一个非动态分配的数组,我输入
int2d_数组[128][128]
int** 2D_array = (int**)calloc(num_rows, sizeof(int*));
for (int i = 0; i < num_rows); i++) {
   2D_array[i] = (int*)calloc(num_columns, sizeof(int));
}
int**2D_数组=(int**)calloc(num_行,sizeof(int*);
对于(int i=0;i

但是如果我想要一个二维数组,其中行是动态的,而列不是动态的,该怎么办?我的直觉是
int*2D_数组[128]但这只会给我一个包含128行和动态分配列的2D数组。

您可以一次分配整个数组。使用
typedef
可以更容易地指定数组声明

typedef int[128] row;
row *twoD_array = calloc(num_rows, sizeof(row));

你可以一次分配整个东西。使用
typedef
可以更容易地指定数组声明

typedef int[128] row;
row *twoD_array = calloc(num_rows, sizeof(row));

在这里,您试图访问2D_数组[行][列]。只有在取消引用行地址后,您才能通过访问任何列值。因此,如果我们更改为2D_数组[column][row],这是可能的。但我们需要在其余应用程序中更改数组的值访问逻辑。

这里,您正在尝试访问2D_数组[row][column]。只有在取消引用行地址后,您才能通过访问任何列值。因此,如果我们更改为2D_数组[column][row],这是可能的。但是我们需要在剩下的应用程序中更改数组的值访问逻辑。

标识符不能以数字开头。标识符不能以数字开头。
int[128]行与
int行[128]?它是一个
类型定义
,它将
定义为
int[128]
的别名
int行[128]?它是一个
类型定义
,它将
定义为
int[128]
的别名。