您的位置:首页 > 编程语言 > C语言/C++

C++二维动态数组的创建与删除

2016-10-18 10:07 477 查看
二维数组的动态创建,最近才了解到,大概有两种方式

     第一种:

                    二维数组可以看作是由许多行组成的,每一行都是一个一维数组。下面,我们结合一个具体例子来演示怎样动态创建二维数组。

 


//动态二维数组
//int **a;代表的是 二维int数组
// a = new int*
;//创建行指针数组
int **a = new int*
;//这一步是前面两行的结合体
for(int i=0;i<n;++i)
{
*(a+i)= new int
;//为每一行分配空间
//a[i] = new int
;
memset(a[i],0,n*sizeof(int));
}
       

第二种:

          int matrix [SIZE][SIZE] = {0};

          int *p;
 p = matrix[0];//这种方式也是可以的,将指针设置为数组中第一个元素的地址

但是:p = matirx;是不可以的问题在于类型不同,前面定义的是int*,但数组是matrix类型是int[size][size];,
所以存储该数组的指针必须是int*[size]类型,c++将数组的维度和类型联系在一起,上面的语句只有将指针声明为要求的维度才合法
 int(*p)[4]  ,这样就可以了 

多维数组的分配:
double(*p)[4](nullptr);
p = new double[3][4];

我们只需要在数组元素类型名之后的的方括号内指定第三维即可
p = new double[4][10][10];
无论,数组有多少维度,都可以用下面的删除
delete[] p;
p = nullptr;

   注意:

    可以用new分配的一维数组的维数,但是对于二维和多维数组来说同样如此,但,也仅仅限制于变量指定最左边的那一维,所有其他的维度都必须是常量或者是常量表达式。因此可以写成这样:

      double (*pBigArray)[10][10];

    pBigArray = new int[max][10][10];

      这样是没有问题的,但是如果把max写在第二个,或第三个,将报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息