主题:C++为多维数组动态分配内存。请知道的大侠告知,万分感谢!!!!!
fefang2003
[专家分:0] 发布于 2003-11-02 10:13:00
请问怎样为一个多维数组动态分配内存呢?能让他的界值都为变量吗?像pi=new int[n][m];
回复列表 (共7个回复)
沙发
ypwang [专家分:70] 发布于 2003-11-02 17:25:00
试试下面的
vector<vector<int> > arr;
arr.resize(n);
for(int i=0;i<n;++i)
arr[i].resize(m);
//生成二维数组arr[n][m]
板凳
ypwang [专家分:70] 发布于 2003-11-02 17:27:00
也可以这样
int **p;
p=new int *[100];
for(int i=0;i<100;i++)
p[i]=new int [100];
3 楼
fyskz [专家分:520] 发布于 2003-11-03 08:23:00
在C++中为数组动态分配内存的格式如下:
第一步:声明
type (*p)[常量1][常量2]...[常量n];
第二步:申请
p=new type[x][常量1][常量2]...[常量n];
说明:先定义一个n维的数组指针,其中p是一个指针变量,x是一个整形变量,
然后申请一个第一维为x的n+1维数组,记住只有第一维x可变。
举例:
1、动态申请一个一维数组
int *p;
int x;
cin>>x;
p=new int[x];
2、动态申请一个二维整型数组
int (*p)[10];
int x;
cin>>x;
p=new int[x][10];
若执行这段程序,给x输入3,则相当于定义一个3行10列的
一个二维数组。实际是申请3*10*2个存储单元,并把其首
地址返回给p,通过p来操纵这个动态数组。
3、动态申请一个三维数组
int (*p)[8][6];
int x;
cin>>x;
p=new int[x][8][6];
注意:
1、申请成功与否,看p的值,若p的值为NULL,则说明申请不成功,
反之,则申请成功。
2、动态申请的存储单元,使用之后应及时返还给系统,方法是:
delete p;即可。
4 楼
fefang2003 [专家分:0] 发布于 2003-11-03 11:42:00
3楼的朋友,谢谢你对我的帮助,但我要的是n维数组的界值全是变量,不是只有第
一个是变量像pi=new int[n][2][2],而是pi=new int[n][m][k];
5 楼
fyskz [专家分:520] 发布于 2003-11-04 06:00:00
我看好多C++的资料,都没有你讲的那种情况!
6 楼
bloodor [专家分:110] 发布于 2003-11-19 23:49:00
可以这样来解决你的问题:利用数组本质的存储结构,pi=new int[10][20][30]的话,访问pi[m][n][k]的话,用pi[10*20*k+m*20+n]表示行了,其中10行20列高度为30,依高度优先,行次优先 ,最后为列,我觉得这是非常可行的办法,我曾经写过一个三维迷宫的例子,就这么用的。不知道楼主觉得徐行不?
7 楼
firstmouse [专家分:120] 发布于 2003-11-20 10:02:00
不建议使用二维以上的数组,那样只会让你的程序越发难以阅读和理解,二维数组我最常用2楼的方法,超过二维就自己写结构或类来使用。
我来回复