c++ 创建动态二维数组

最近碰到一个c++创建动态二维数组的问题。上网查了查资料,现在吧有关内容做一个小结。
关于二维数组,有几个容易混淆的概念。

int ** arr0;
int *arr1[];
int (*arr2)[];
int arr3[][];

int * *arr0 是一个二级指针,就是指针的指针。int *arr1[]是一个指针数组,就是说,它首先是一个数组 ,而数组中的元素都是 int 型的指针。int (*arr2)[] 是一个数组指针, 它首先是一个指针, 不过该指针指向的是一个数组,这点可以类比于函数指针。 int arr3[][]是一个二维数组, 实际上是数组的数组,它有外层数组,二外层数组里的每一个元素都是(内层的)数组。实际上,二维数组int arr3[][]与 数组指针 int (*arr2)[]可以对应起来,假如函数形参是int arr3[][] ,实参为 int(*arr2)[]的话是可以调用成功的,这就像有一个这样的函数签名:void print(int arr[] ,int size) 你这样

int a[]={1,2,3};
int *p =a;
print(p ,3); 

是没有问题的。
下面说说如何创建动态二维数组,在c++中使用一对运算符 new 和delete来处理动态数组的创建。我在这里按照使用new的次数分为两种方法。
1.使用一次new运算符:


    int size =3;

    float  (*arr)[2]= new float[size][2]; //二维数组分配内存

    for(int i=0;i<size;++i)  //对二维数组的初始化操作
    {
        for(int j =0;j<2;++j)
        {
            arr[i][j] = 0;
        }
    }


    delete[] arr; //销毁内存
    arr=NULL;

在这里定义了一个3x2 的二维数组 ,要注意如果用这种方式有个限制,即二维数组的列数必须指定,否则编译会报错。
2.使用两次new运算符:

    int xsize = 4,ysize =5;
    int **arr = new int*[xsize]; //为二维数组分配内存(外层)
    int i,j;
    for(i =0;i<xsize;++i)
    {
        arr[i]= new int[ysize];  //为二维数组分配内存(内层)
    }

    for(i=0;i<xsize;++i)     //初始化
    {
        for(j=0;j<ysize;++j)
        {
            arr[i][j]=0;
        }
    }

    for(i =0;i<xsize;++i)  //销毁内存
    {
        delete[] arr[i];
        arr[i]=NULL:
    }

    delete[] arr;
    arr=NULL:

上面定义了一个4x5 的二维数组。可以看到,在分配内存时时使用了两次new,那么在销毁内存时也要使用两次delete。
可以看到两种方法操作二维数组元素的方式是一样的。

  • 10
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值