如何实现 二维数组的动态内存分配?

如题可不可以这样,比如:int (*p)[10]=new int[10][10];
2024-11-29 00:08:10
推荐回答(4个)
回答1:

//动态分配二维数组空间
{
m_iHight=10;//二维数组的高度
m_iWidth=10;//二维数组的宽度
//动态分配一个二维数组m_ppTable内存空间
//其类型为int
//m_ppTable指向该数组
int **m_ppTable;
m_ppTable=new int *[m_iHight];

//动态分配m_iHight个类型为int *的内存空间
//分配的是行地址空间
for(int i=0;i m_ppTable[i]= new int[m_iWidth];

//动态分配m_iWidth个类型为int的内存空间
//分配的是某行的数值空间
}
//由此分配的二维数组空间并非是连续的
//可以使用m_ppTable[row][col]来给该二维数组赋值
//其中 0<=row
//释放所分配的内存空间
{
for(int i=0;i delete[m_iWidth]m_ppTable[i]; //以行为单位释放数值空间
delete [m_iHight]m_ppTable; //释放行地址空间
}

回答2:

要明白2维数组是指向指针的指针

例子:
int** a=new int*[n];
for(int i=0;i!=n;i++)
a[i]=new int[n];

//////////////

可以

3L的说LZ的方法不行

行不行 试试再说
#include
using namespace std;
int main(){
int (*a)[10]= new int[10][10];
a[0][0]=1;
a[9][9]=2;
cout<<"a[0][0]= "< cout<<"a[9][9]= "< return 0;
}
G++ 编译没问题
能运行

LZ可以去试下

回答3:

你那样是不行的。
有两种方法,一种楼上已经说了。
另一种就是先用一维的把行和列的空间申请下来,然后把它拆成二维的。
例:
int a[25]=new int[5*5];
可以拆成你想要的行和列。

回答4:

建议你到网上查下什么是数组指针, 什么是指针数组.
int (*p)[10]=new int[10][10];
这表示一个int型的指针p, p指向一个10*10共100个int空间的二维数组.