C++中用new动态创建二维数组的格式一般是这样:
TYPE (*p)[N] = new TYPE [][N];
其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针。
还有一种方法,可以不指定数组的列数:
int **p;
p = new
int*[10]; //注意,int*[10]表示一个有10个元素的指针数组
for (int i = 0; i != 10; ++i)
{
p[i] = new
int[5]; //或者*(p+i) = new
int[5];
}
这里是将p作为一个指向指针的指针,它指向一个包含10个元素的指针数组,并且每个元素(均为指针)指向一个有5个元素的数组,这样就构建了一个10行5列的数组。
当数组使用完毕,释放空间的代码是:
for(int i = 0; i != 10; i++)
{
delete[]
p[i];
}
delete[] p;
处理二维数组,可以用降维或是二维法。
降维法是用一位数组来接受二维数组,将二维元素的首地址&a[0][0]作为参数,传递给函数,函数用int
*接受。
二维法就直接用二维数组来接受,但是需要指定列数。
另附C语言版动态二维数组的定义和释放
#include
#include
int main()
{
int n1,n2;
int **array,i,j;
puts("输入一维长度:");
scanf("%d",&n1);
puts("输入二维长度:");
scanf("%d",&n2);
array=(int**)malloc(n1*sizeof(int*)); //第一维
for(i=0;i
{
array[i]=(int*)malloc(n2* sizeof(int));//第二维
for(j=0;j
{
array[i][j]=i+j+1;
printf("%d\t",array[i][j]);
}
puts("");
}
for(i=0;i
{
free(array[i]);//释放第二维指针
}
free(array);//释放第一维指针
return 0;
}