itshirt
小狐狸
小狐狸
  • UID23125
  • 注册日期2008-03-05
  • 最后登录2009-02-05
  • 发帖数27
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:4223回复:1

c/c++建立动态二维数组方法

楼主#
更多 发布于:2008-11-11 11:10
想建一个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先指向它,然后将这个连续的地址空间里的每个指针都指向一个新的一维数组,这样才能建立成动态的二维数组:


最后总结一下,方法二的代价太高,不是必须的情况下最好用方法一。
思你所想最大的IT专业T恤体验中心 淘宝店:http://shop33681332.taobao.com/
marffin
火狐狸
火狐狸
  • UID26524
  • 注册日期2008-10-04
  • 最后登录2012-10-17
  • 发帖数188
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2008-11-11 11:10
上哪儿转的?想灌水也不是在这个版吧
游客

返回顶部