C++ 动态申请二维数组与二维数组传参

版权声明:转载请注明出处 https://blog.csdn.net/qq_42292831/article/details/85012515

以往在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]将无法指向一个固定的内存地址

解释:

猜你喜欢

转载自blog.csdn.net/qq_42292831/article/details/85012515