我最近去过一次采访,他们让我写了一个程序,为二维数组动态分配内存(i = 3和j = 2)
答案 0 :(得分:8)
int *a = (int*)malloc(i*j*sizeof(int));
您可以使用a[k][l]
a[k*i+l];
答案 1 :(得分:1)
有些人会讨厌这个,但这是我的最爱。主要优点是可以通过单个free
取消分配,并且仍允许通过A[r][c]
进行访问。
#include <stdlib.h>
int main(void)
{
int num_row = 3, num_col = 2, r;
int ** A;
A = malloc(num_row*(sizeof(*A)+num_col*sizeof(**A)));
for (r = 0; r < num_row; r++)
{
A[r] = (int*)(A+num_row)+r*num_col;
}
/* Accessing element at row r and column c is through:
*
* A[r][c].
*/
free(A);
return 0;
}
答案 2 :(得分:0)
int i = 3;
int j = 2;
int** a = malloc(i * sizeof(int*));
for (unsigned int k = 0; k < i; k++) {
a[k] = malloc(j * sizeof(int));
}
// Now you can use it.
a[0][0] = 0;
a[2][1] = 3;
在提出问题之前,您是否尝试过搜索SO问题数据库?