我最近参加了一次面试,他们要求我编写一个程序来为二维数组(i=3 和 j=2)动态分配内存
问问题
10193 次
3 回答
9
int *a = (int*)malloc(i*j*sizeof(int));
你可以a[k][l]
得到a[k*i+l];
于 2013-06-16T15:09:36.687 回答
2
你们中有些人会讨厌这个,但它是我的最爱。主要优点是它可以通过单个解除分配,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;
}
于 2013-06-16T17:08:33.937 回答
1
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 问题数据库吗?
于 2013-06-16T15:13:07.610 回答