|
发表于 2009-10-31 01:04:55
|
显示全部楼层
IP:江苏扬州
我知道用new可以动态开辟一维数组,例如int n=3; int *pi=new int[n]; 但是如果开辟二维数组的话,必须得确定第二维的大小,例如int *ppi[6]=new int[n][6]; 如何将第二维也变成一个变量,而没有错误?
int **p = new int* [m]; for(i = 0 ; i < m ; i++) p[i] = new int[n];
一个比较典型的例子是二维数组的动态申请和释放:
#include<iostream> #include<iomanip> using namespace std; void main() { //动态获得二维数组的尺寸 int m=0,n=0; cout<<"input size: "; cin>>m>>n; if(m<=0||n<=0) exit(-1); //动态申请二维数组 int i,j; int **p=new int* [m]; for(i=0;i<m;i++) p[i]=new int[n]; //为数组元素赋值 for(i=0;i<m;i++) for(j=0;j<n;j++) p[i][j]=i*j;
//打印二维数组。 for(i=0;i<m;i++) { for(j=0;j<n;j++) cout<<setw(3)<<p[i][j]; cout<<endl; } //释放数组。 for(i=0;i<m;i++) delete[] p[i]; delete[] p; }
CPPCN论坛高手注释:
int i,j; int **p=new int* [m]; for(i=0;i<m;i++) p[i]=new int[n];
int **p声明了一个二级指针,指针指向一个新开辟的一级指针数组,数组包含m个元素, p[i]=new int[n]中,p为二级指针,p[i]为一级指针,p[i]=new int[n]就是给p[i]新开辟一个int型的数组,数组的元素个数为n个. 这样p指向m个一级指针,这m个一级指针又各自指向n个整型数组,不就等于开辟一个二维数组吗? |
|