二维数组的两种动态分配内存方法
主要有两种方法:连续的和不连续的。
不连续的:
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;
可以看到,直接给第一个一维数组分配所有需要的内存。然后手动修改下一个一维数组的地址。因此该二维数组是连续的,跟一般定义的二维数组并无他异。