本文主要从内存分配的角度来分析一下数组的动态创建过程,具体过程参考下文的代码很容易理解,不能深入理解具体过程的可以在代码调试阶段查看一下各个数组元素的地址。
#include <iostream>
using namespace std;
int main()
{
int m = 10, n=5, k=6;
//动态创建一维数组pa[m]
int *pa = new int[m];
delete [] pa;
//动态创建二维数组pb[m][6],
//连续分配内存,pb[0][0],pb[0][1]...内存编号连续
int (*pb)[6] = new int[m][6];
delete [] pb;
//动态创建二维数组pc[m][n]
//pc[0],pc[1],pc[2]...内存编号连续,
//每个内存中存放一个指向int类型的指针,该int类型指针从pc[m]的地址开始
int **pc = new int *[m];
for (int i=0;i<m;i++)
{
pc[i] = new int[n];
}
for(int i=0;i<m;i++)
{
delete [] pc[i];
}
delete []pc;
//动态创建三维数组
int ***pd = new int **[m];
for (int i=0;i<m;i++)
{
pd[i] = new int *[n];
for (int j=0;j<n;j++)
{
pd[i][j] = new int [k];
}
}
for (int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
{
delete [] pd[i][j];
}
delete [] pd[i];
}
delete [] pd;
return 0;
}