阅读:4477回复:1
c/c++建立动态二维数组方法
想建一个n*m的二维的动态数组,即 int** a; a[0..n-1][0..m-1], 我的方法如下:
方法一:用一维数组代替: int* a = (int*) malloc(sizeof(int)*n*m); 使用时应该这样:Ai,j 应该写成: a[i*m+j]; 方法二:用循环建立二维数组: int** a = (int**) malloc(sizeof(int*)*n); int i; for (i=0; i<n; ++i) a = (int*) malloc(sizeof(int)*m); 这样,a就可以像二维数组一样使用了: a[j]; 注意,以后释放空间时也需要用循环进行删除: for (i=0; i<n; ++i) free(a); free(a); 对方法二进行一点简单说明: int** a; 是一个二级指针,如下图: 而动态的二维数组应该类似连表的样子,如下图: 所以需要用malloc先创建一个连续的地址空间,然后让a先指向它,然后将这个连续的地址空间里的每个指针都指向一个新的一维数组,这样才能建立成动态的二维数组: 最后总结一下,方法二的代价太高,不是必须的情况下最好用方法一。 |
|
|
1楼#
发布于:2008-11-11 11:10
上哪儿转的?想灌水也不是在这个版吧
|
|