我们知道在C和C++中是无法直接定义动态数组的,在定义数组的时候就要把数组的大小确定好,如
int a[4][5];
如果写成
int x,y,a[x][y];
x=4;y=5;
编译时通不过。
但实际中我们可能经常会希望数组是动态的,这时我们可以用new来定义动态数组。
首先,我们来定义最简单的一维动态数组
int m;
int *p=new int[m];
用new来开辟一段内存,用*p来接收返回的地址。
二维数组也是类似的情况,不过二维数组无法直接开辟,还需借助指向指针数组的指针来完成这一过程。
int m,n;
cin>>m>>n;
int **p = new int*[m];
for(int i = 0,i<m,i++)
{
p[i] = new int[n];
}
这样就可以成功开辟出动态二维数组p[m][n]了。
下面是开辟三维数组及检测三维数组是否成功开辟的完整代码
#include<iostream>
using namespace std;
int main()
{
int m, n,v;
cin >> m >> n>>v;
int ***p = new int**[m];
for (int i = 0; i < m; i++)
{
p[i] = new int*[n];
for (int j = 0; j < n;j++)
{
p[i][j] = new int[v];
}
}
//测试三维数组是否成功开辟
cout << "start!" << endl;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < v; k++)
{
cin >> p[i][j][k] ;
}
}
cout << endl ;
}
for (int i = 0; i < m;i++)
{
for (int j = 0; j < n;j++)
{
for (int k = 0; k < v;k++)
{
cout << p[i][j][k] << "\t";
}
cout << endl;
}
cout << endl;
}
system("pause");
}
![运行结果为](https://img-blog.csdn.net/20160617125409273)
更高维度动态数组的开辟以此类推。