回 帖 发 新 帖 刷新版面

主题:C++为多维数组动态分配内存。请知道的大侠告知,万分感谢!!!!!

请问怎样为一个多维数组动态分配内存呢?能让他的界值都为变量吗?像pi=new int[n][m];

回复列表 (共7个回复)

沙发

试试下面的
vector<vector<int> > arr;
arr.resize(n);
for(int i=0;i<n;++i)
    arr[i].resize(m);
//生成二维数组arr[n][m]

板凳

也可以这样
int **p;
p=new int *[100];
for(int i=0;i<100;i++)
   p[i]=new int [100];

3 楼

在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 楼

3楼的朋友,谢谢你对我的帮助,但我要的是n维数组的界值全是变量,不是只有第
一个是变量像pi=new int[n][2][2],而是pi=new int[n][m][k];

5 楼

我看好多C++的资料,都没有你讲的那种情况!

6 楼

可以这样来解决你的问题:利用数组本质的存储结构,pi=new int[10][20][30]的话,访问pi[m][n][k]的话,用pi[10*20*k+m*20+n]表示行了,其中10行20列高度为30,依高度优先,行次优先 ,最后为列,我觉得这是非常可行的办法,我曾经写过一个三维迷宫的例子,就这么用的。不知道楼主觉得徐行不?

7 楼

不建议使用二维以上的数组,那样只会让你的程序越发难以阅读和理解,二维数组我最常用2楼的方法,超过二维就自己写结构或类来使用。

我来回复

您尚未登录,请登录后再回复。点此登录或注册