两种方法:
1、先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的),相当于递归定义:
typedef int array[COL]; //使用typedef定义一个具有COL个元素的数组类型
array *a; //定义二维数组,与一维数组相同
a=new array[row]; //为该一维数组(实际上二维)申请空间
该方法定义的动态二维数组的释放只需以下语句即可:
delete[] a;
a=NULL;
2、使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组
int **b=new int*[row]; //分配一个指针数组,将其首地址保存在b中
for(i=0;i<row;i++) //为指针数组的每个元素分配一个数组
b[i]=new int[col];
该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
for(i=0;i<row;i++)
{
delete [col]b[i];
b[i]=NULL;
}
delete [row]b;
b=NULL;
/************************************************************************
* 动态二维数组(visual studio 2005版本)
************************************************************************/
#include <iostream>
#include <conio.h>
using namespace std;
#define ROW 4 //行数
#define COL 6 //列数
//使用typedef定义一个具有ROW个元素的数组类型
typedef int array[COL];
int main()
{
int row=ROW; //二维数组的行数
int col=COL; //二维数组的列数
int i,j,n=1;
///
//定义二维数组,与一维数组相同
array *a;
a=new array[row];
///
//赋值
for(i=0;i<row;i++)
for(j=0;j<col;j++)
a[i][j]=n++;
cout <<"solution 1:"<<endl;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<a[i][j]<<"\t";
cout<<endl;
}
///
//释放
//或者delete[row] a; 或者delete[row]a; 或者delete [row]a;
//或者delete[] a; 或者delete[]a; 或者delete []a; 或者delete [] a;
delete[] a;
a=NULL;
cout<<endl;
///
//使用数组指针。分配一个指针数组,其首地址保存在b中
int **b=new int*[row];
//为指针数组的每个元素分配一个数组
for(i=0;i<row;i++)
b[i]=new int[col];
///
//赋值
for(i=0;i<row;i++)
for(j=0;j<col;j++)
b[i][j]=n++;
cout <<"solution 2:"<<endl;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<b[i][j]<<"\t";
cout<<endl;
}
///
//释放
for(i=0;i<row;i++)
{
delete [col]b[i];
b[i]=NULL;
}
delete [row]b;
b=NULL;
getch();
return 0;
}