现在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),这样才能将指针数组中的所有指针所指的堆区空间释放干净
上一篇:调用函数显示二维数组元素的值