二维数组的两种动态分配内存方法

主要有两种方法:连续的和不连续的。

不连续的:

int x,y;
cin>>x>>y;
int **a = new int*[x];
for(int i=0;i<x;i++)
    a[i] = new int[y];

可以看出第二维的内存都是连续分配的。但是第一维不是,因为分配第一维内存时系统不知道第二维的长度,所以随机分配内存。

 

连续的

int x,y;
cin>>x>>y;
int **a = new int*[x];
a[0] = new int[x*y];
for(int i=1;i<x;i++)
    a[i] = a[i-1]+y;

可以看到,直接给第一个一维数组分配所有需要的内存。然后手动修改下一个一维数组的地址。因此该二维数组是连续的,跟一般定义的二维数组并无他异。

posted @ 2018-05-09 22:12  睿阳  阅读(830)  评论(0编辑  收藏  举报