以往在C++的学习中我们知道:
int *ptr = new int; 这样可以动态分配一个int型指针
int *ptr = new int[3]; 这样可以动态分配一个一位数组
但是如何动态分配一个二维数组呢?像这样:
int *ptr = new int[3][3] ?运行测试->显然这种分配方式是不正确的:
在尝试新的方法之前,我们需要首先了解二维数组在内存中的存储结构:
理解了这幅图的基本原理,我们就可以编写相应的算法来进行实现:
****************************************************************************************************************************************
一:动态申请二维数组
Step1:
首先我们呀先定义一个数组,用来存放指针
int **array = new int*[3];
☆解析(为什么要使用二维数组?):
首先我们new了一个数组,内部存放了三个指针,然后我们用一个指针指向该数组的首地址:
这里如果array是一级指针,那么当给array[0]再次引出一条指向新内存的线(指针)时,就会出现错误,因为图中红色框框中的每条线对应的就是一个指针,
而当array是一级指针的时候,array[0] 表示的不再是指针,而是指针执行内存中的值,所以这里使用二级指针的根本目的是为了使得能够让array[i]继续指向其他内存空间来产生二维数组的效果。
Step2:
然后我们在进一步为第一步中的每个指针再次分配空间:
for (int i = 0; i < 3; i++)
{
array[i] = new int[3];
}
这样就达到了第一步中图片里面的效果,构建了3x3的二维数组;
二:二维数组传参(二维数组作为形参)
void Func( int (*array)[3] );
//这里要首先指定一级指针的大小,否则array[0]指向的空间内存大小如果不确定,array[1]将无法指向一个固定的内存地址
解释: