方法之一:
int **p;
p=new int*[n];
for(i=0;i<n;i++)
p[n]=new int[n];
的方式来创建二位数组
这种方式虽然在用法上和静态2为数组一样,但是物理结构缺完全不同
对于int a[3][3],数组在内存中得分不是连续的
即:
[0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [2][0] [2][1] [2][2]
而使用上面的方法创建的二位数组的内存分布是这样的
[0] [1] [2]
| | |
V V V
[0] [0] [0]
[1] [1] [1]
[2] [2] [2]
这使得我们必须以下标的方式访问数组
比如复制数组时必须使用
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
a[i][j]=b[i][j]
而不能使用比较高效的方式,如:
memcpy(a,b,sizeof(a));
在释放数组时必须使用
for(int i=0;i<m;i++)
delete[] a[i];
delete a;
int **p;
p=new int*[n];
for(i=0;i<n;i++)
p[n]=new int[n];
的方式来创建二位数组
这种方式虽然在用法上和静态2为数组一样,但是物理结构缺完全不同
对于int a[3][3],数组在内存中得分不是连续的
即:
[0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [2][0] [2][1] [2][2]
而使用上面的方法创建的二位数组的内存分布是这样的
[0] [1] [2]
| | |
V V V
[0] [0] [0]
[1] [1] [1]
[2] [2] [2]
这使得我们必须以下标的方式访问数组
比如复制数组时必须使用
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
a[i][j]=b[i][j]
而不能使用比较高效的方式,如:
memcpy(a,b,sizeof(a));
在释放数组时必须使用
for(int i=0;i<m;i++)
delete[] a[i];
delete a;