我想询问是否可以使用malloc在C中分配一个数组,如果我们知道列数而不是行数。
int Array[runtime value][N];
答案 0 :(得分:2)
是。有几种方法可以做到。
实际上不是运行时,但您不必指定一个维度:
int array[][3] = {{1,2,3}, {4,5,6}};
在堆栈上,rows
是运行时变量:
int array[rows][COLUMNS];
使用malloc
在堆上,但不要忘记稍后再调用free
:
int (*array)[COLUMNS];
array = malloc(rows*sizeof(int[COLUMNS]));
// ...
free(array);
答案 1 :(得分:1)
是。您可以动态分配一个:
// Allocate the columns
int** two_dimensional_array = malloc(COLUMNS * sizeof(int*));
// Find the number of rows on runtime
// however you please.
// Allocate the rest of the 2D array
int i;
for (i = 0; i < COLUMNS; ++i) {
two_dimensional_array[i] = malloc(sizeof(int) * ROWS);
}
或者,你可以在堆栈上放一个可变大小(C99):
int n;
scanf("%d", &n);
int arr[n][COLUMNS];