要求实现一个函数,该函数的参数为一对二维数组的位数,row和col,函数的返回值为一个二维数组。
函数的原型为:
int** malloc_Array2D(int row, int col);
这里row和col均是未知数。
数组的定义是连续的内存,访问连续,对于二维数组来说,还要确定行列的关系是唯一的,就是说,如果给定row = 4; col = 3; 元素的总个数是row * col = 4 * 3 = 12; 如何确保a[3][2]是我们想要的那块内存呢? 因为对于row = 6; col = 2; 来说,总元素也是12,但是从我们对静态的二维数组来理解,a[3][2]这个元素是不存在的,因为它越界了。那么如何确保我们访问的元素就是我们想要的呢?这就要求对第一维数组进行初始化了。
以下是该函数的实现代码:
int** malloc_Array2D(int row, int col) { int size = sizeof(int); int point_size = sizeof(int*); int c = 0; int col1 = col; // 确保内存是连续的 int** arr = (int **) malloc(point_size * row + size * row * col); if (arr != NULL) { memset(arr, 0, point_size * row + size * row * col); int *head = (int*)((int)arr + point_size * row); // 初始化第一维数组,使各个元素指向我们想要的那一行 while (col1--) arr[col1] = (int*)((int)head + row * col1 * size); } return (int**)arr; }
用同样的思路,可以构造出动态的三、四维数组,等等。
浙公网安备 33010602011771号