如何动态分配数组,代码如下.
class MyClass { public: MyClass(int a) {
} };
int main(int argc, char* argv[]) { MyClass *pTest; pTest = new MyClass[10]; return 0; }
我知道用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个整型数组,不就等于开辟一个二维数组吗?
谢谢live41的回答,不过我的问题不是这样,如上述的列子,比如
class MyClass { public: MyClass() {
} };
int main(int argc, char* argv[]) { MyClass *pTest; pTest = new MyClass[10]; return 0; }
这种情况是成立的,构造涵数中没有参数,动态的给pTest分配了10个空间,
不过
class MyClass { public: MyClass(int a) {
} };
int main(int argc, char* argv[]) { MyClass *pTest; pTest = new MyClass[10]; return 0; }
这种情况是构造涵数中带有参数,上述程序编译不通过,问题是如何在有参数的构造涵数的情况下,动态给pTest分配 10个空间呢.