C++ new申请二维动态数组详解
new关键字
new关键字用于申请一段动态内存空间,位于堆上,在程序运行过程中才执行。可以用来创新数组和实例化对象。
如图所示:用new申请一维动态数组,大小为5。
int *arrayPtr=new int[5];
其中new后面接的是对象,上面为一个int[5]的数组,其返回值为指向数组元素的指针变量。即申请了sizeof(int)*5个字节大小的内存,并返回其地址值存放于指针arrayPtr中。
二维数组动态申请
方法一
int **arrayPtr=new int*[5];
for(int i=0;i<5;++i)
{
arrayPtr[i]=new int[5];
}
其中,第一行的new申请了sizeof(int*)x5个字节大小空间,并将其地址值存放于二级指针arrayPtr中(此处应为二级指针,因为指向的数组元素为一级指针),简单点说就是申请了一个数组大小为5,元素数据类型为 int* 的数组。for循环的代码表示的是遍历arrayPtr数组(里面元素为int*)里的每一个元素,并申请大小为5的一维数组。
如下图所示:
方法二
int (*arrayPtr)[5]=new int[5][5];
其中,new申请了sizeof(int)x5x5的内存大小,并将其地址值存储于指针arrayPtr,arrayPtr为数组指针,指向int[5]的数组。
也就是说,创建了一个大小为5的数组,数组中的元素为int[5],所以其地址值保存的指针类型为指向int[5]的指针类型,就是int(*)[5]。
如下图所示:
最后
其实方法一和方法二的区别就是,方法一用的是指针数组,方法二用的是数组指针,方法的不同,导致地址值存储的指针类型不同。