C++二维动态数组的创建与删除
2016-10-18 10:07
477 查看
二维数组的动态创建,最近才了解到,大概有两种方式
第一种:
二维数组可以看作是由许多行组成的,每一行都是一个一维数组。下面,我们结合一个具体例子来演示怎样动态创建二维数组。
第二种:
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写在第二个,或第三个,将报错
第一种:
二维数组可以看作是由许多行组成的,每一行都是一个一维数组。下面,我们结合一个具体例子来演示怎样动态创建二维数组。
//动态二维数组
//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写在第二个,或第三个,将报错
相关文章推荐
- C++二维动态数组的创建与删除
- C++二维动态数组的创建与删除
- 动态创建二维vector数组 C和C++ 及指针与引用的区别
- C++学习笔记——C++动态数组的创建与删除
- C++ 二维动态数组的声明与删除
- c++创建二维动态数组与内存释放
- 动态创建二维vector数组 C和C++ 及指针与引用的区别
- c++创建二维动态数组与内存释放问题
- C++ 用new 、delete 动态创建、删除数组
- 动态创建二维vector数组 C和C++ 及指针与引用的区别
- C++中二维动态数组的创建
- C++学习笔记——C++动态数组的创建与删除
- 二维动态数组的删除和创建
- C++ 二维动态数组创建及越界问题
- C++动态创建和删除二维数组
- C++创建动态数组
- c++ 依据输入动态声明数组(一维,二维)
- c++ primer plus 习题5.7(使用new为结构创建动态数组)
- c++ 根据输入动态声明数组(一维,二维)
- 动态创建二维vector数组