多语言展示
当前在线:1207今日阅读:27今日分享:41

C/C++堆区创建二维数组的正确方式

现在C语言中有很多堆区创建二维数组的方式,但是都或多或少存在一些不足,比如说创建出的数据不连续,连续但是赋初值困难,在这里笔者分享一个在堆区创建二维数组的简单方法,并进行讲解。
工具/原料

VS2017/VS2019等编译器

主流的创建方法
1

笔者所要介绍的也是这种方法的变体,与这方法稍有不同,下文会进行详细讲解。

2

如图所说,这种创建方式存在堆区申请的空间不连续的问题,并且初始化很麻烦,不予以推荐。(解释:这里通过创建指针数组的方式,先创建一个存放指针的数组,通过for循环依次创建一维数组(没错,就是一维数组),一维数组的数组名(也就是指针)放入最先创建的指针数组内,完成创建),至于为什么可以用二维数组的方式进行访问,读者可以这么理解:首先对于d这个指针数组,d[i]表示第一次解指针,之后d[i][n]经过第二次解指针,便可以访问到存储的数据了。

3

第三种方法确实可以解决前两种创建方式的缺点,但是也有一个很明显的缺点,对堆区数组数据进行初始化很麻烦,原理和第二种很相似,区别在于其将指针数组放在了堆区,而在栈区留下一个二级指针以供访问。

笔者推荐的创建方式
1

简而言之,也就是在第一种方式上加了后面的初始化内容。

2

原理解释:其实很好理解,由于C语言运算符的优先原则 *arr 须括起来,将此标识符理解为指针,后面接上[3] 也就变成了指针数组,new int[3][3]这句话是直接在堆区开辟一块3X3的空间,后面接上初始化内容,便完成了数组的创建及初始化。

3

效果展示:

注意事项
1

创建数组时注意等号前后的宽度一定要相同

2

使用delete释放堆区空间的时候一定记住要加[](delete [] arr),这样才能将指针数组中的所有指针所指的堆区空间释放干净

推荐信息