D&T
专注于:操作系统,计算机网络,移动开发,数据安全

导航

 

要求实现一个函数,该函数的参数为一对二维数组的位数,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;  
}     

用同样的思路,可以构造出动态的三、四维数组,等等。

  

posted on 2013-07-09 10:07  wem247  阅读(252)  评论(0)    收藏  举报