将内存分配给二维数组

时间:2013-07-25 05:56:08

标签: c arrays multidimensional-array

我想询问是否可以使用malloc在C中分配一个数组,如果我们知道列数而不是行数。

int Array[runtime value][N];

2 个答案:

答案 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];