对于一维数组可以用T *arr=new T[n]的形式动态创建,而new对于多维数组在创建时只能有一维是可以动态改变的,其它的则必须给出。如:T (*darr)[5][6];darr=new darr[n][5][6];
下面是动态创建数组的两个方法:
1.
const int xsize=10;
const int ysize=10;
int *CreateArray(int x,int y)
{
int *temp;
temp=new int [xsize*ysize];
for (int j=0; j<y; ++j)
for (int i=0; i<x; ++x)
temp[j*xsize+i]=j*size+i;
return temp;
}
这种方法实际上创建的是一维数组,显然不可以像arr[i][j]这样用,只不过可以“当作”二维数组用,即把temp中的值按一定的规律取出构造一个二维数组。x*y的值不能大于xsize*ysize的值,当x=xsize时,“二维数组”的值相对于一维数组是连续的,否则只在同一行上连续。
2.
int** CreateArray(int x,int y)
{
int **temp;
temp=new int*[y];
for (int i=0; i<x; ++i)
temp[i]=new int[x];
return temp;
}
这种方法创建的当然可以用arr[i][j]了。
原来都是把*temp和**temp作为形参,结果是失败的,具体原因是。。。
来个例子:
#include <iostream>
using namespace std;
const int xsize=10;
const int ysize=10;
int* CreateArray(int x,int y)
{
int *p;
p=new int[xsize*ysize];
for (int j=0;j<y;++j)
{
for (int k=0;k<x;++k)
p[j*xsize+k]=j*xsize+k;
cout << endl ;
}
return p;
}
int** CreateArray2(int x,int y)
{
int **temp;
temp=new int*[y];
for (int i=0; i<x; ++i)
temp[i]=new int[x];
return temp;
}
int main()
{
int *p;
int x,y;
cout << "enter x and y:" ;
cin >> x >> y;
p=CreateArray(x,y);
for (int j=0;j<y;++j)
{
for (int k=0;k<x;++k)
cout << p[j*xsize+k] << '/t';
cout << endl ;
}
delete[]p;
int **p2;
p2=CreateArray2(4,5);
for (int i=0; i<4; ++i)
{
for (int j=0; j<5; ++j)
cout << &p2[i][j] << '/t' ;
cout << endl ;
}
delete[] p2;
system("pause");
return 0;
}
资料:
http://www.newasp.net/tech/program/21250.html
http://blog.youkuaiyun.com/xmxoxo/archive/2006/11/05/1367855.aspx