在c++里如何动态定义1个2维数组 ?

rt... rt 展开
 我来答
kaixingui2012
推荐于2016-06-20 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:7782万
展开全部

c++里动态定义2维数组方法为:

  1. 定义二维指针

  2. 分配”行指针“数组

  3. 为每行分配数据数组

  4. 使用二维数组

  5. 释放每行的数据数组 (不再使用该内存后,要手工完成内存的释放)

  6. 释放”行指针“数组

参考代码:

#include <iostream>
#include <iomanip>
using namespace std ;
#define ROW 5
#define COL 10
int main()
{
    int **pp,i,j;
    pp=new int *[ROW]; //分配行指针数组,返回数组首地址给pp
    for( i=0;i<ROW;i++ )
        pp[i]=new int[COL]; //为每行分配数据数组

for( i=0;i<ROW;i++ ){
        for( j=0;j<COL;j++ )
            pp[i][j]=(i+1)*(j+1) ; //向二维数组中存储数据
    }
cout << "ARRAY's ADDRESS: " << pp <<endl;
    for( i=0;i<ROW;i++ ){
        cout << "ROW_"<<i+1<<"'s ADDRESS: "<< pp[i] ; //输出每行的地址
        for( j=0;j<COL;j++ )
            cout << setw(3)<<pp[i][j] ; //输出数组元素
        cout <<endl ;
    }

    for( i=0;i<ROW;i++ )
        delete []pp[i]; //释放每行的指针
    delete []pp ; //释放指针数组
    return 0;
}

c++动态定义2维数组,实际上是先分配一个指针数组,然后再为每个指针数组分配相应的数据数组。与真正的二维数组的差别是:

  1. 二维数组的存储空间是在内存中连续的,实际上还是个一维数组,只是将一维数组分成了N段;而动态分配的二维数组,其行指针数组是一个连续的一维数组,其中存储的是一维指针,这些指针值不一定是连续的,与内存使用情况有关。

  2. 从中还可以看出,动态二维数组,比真正的二维数组多了一个行指针数组的多余内存消耗。

  3. 动态定义的二维数组每一行的列宽可以是变化的(一般情况下是一样宽的);真正的二维数组每行的列宽必须且只能一样。

  4. 真正的二维数组在其所定义的函数结束后,内存自动释放;动态定义的二维数组,需要用显式的代码进行内存释放。

chang290
推荐于2016-08-16 · TA获得超过517个赞
知道小有建树答主
回答量:452
采纳率:100%
帮助的人:0
展开全部
二维数组有两层的意思,第一维是一个指针数组,第二维就是第一维中每个指针所指向的数组,下面是一个实例:
int** ptr1 = new int*[4]; //先定义第一维,他们是一个指针数组,这里是int类型。 因为是指向指针的数组所有所用了 int**
for(int i=0;i<4;i++)
ptr1[i] = new int[4]; //第一维中的每个指针又是指向一个数组的。

下面是一个程序可以看看:

int main(int argc, char* argv[])
{
int** ptr = new int*[4];
int i,j;
for(i=0;i<4;i++)
ptr[i] = new int[4];
for(i=0;i<4;i++) //为每一个数赋值
for(j=0;j<4;j++)
ptr[i][j] = i*j;
for(i=0;i<4;i++) //将所有的数值显示出来
{
for(j=0;j<4;j++)
{
cout<<j<<' ';
}
cout<<endl;
}

return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迁安一中大侠
2006-03-05 · 超过51用户采纳过TA的回答
知道答主
回答量:179
采纳率:0%
帮助的人:0
展开全部
先在开始时定义一个指针
比如:
int * a;
然后需要时定义数组:
a =new int[8][8];
就是定义一个64个数的二维数组。也可以这样:
a =new int[8][];
是定义一个列数不确定的二维数组,
访问时数组名是a
比如a[0][2]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e1ee2fa91
2006-03-03 · TA获得超过233个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:195万
展开全部
#include<vector>
...
vector<vector<int> > arr;

够动态吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式