C语言之对多维数组的简易理解

来源:互联网 发布:c语言入门那本书好 编辑:程序博客网 时间:2024/05/21 06:50
    在平常学习的过程中,必定会经常跟数组打交道并且也经常使用数组,不管是一维数组也好还是多维数组也罢,数组可以说是时常出现。相比较而言,对一维数组来说,理解以及使用都是轻车熟路。但是相比一维数组,多维数组的使用以及理解却有些偏差。在此,我对多维数组进行了简易的理解。    首先以一维数组为例。要画出一个一维数组,想必非常简单。
    arr[4] = { 1 , 2 , 3 , 4 };

这里写图片描述
上图便是一维数组的存储情况。
但是,当一维数组升级成二维数组时呢?我们平常所看的书本等,在画二维数组时,将二维数组列表化。这样可以让读者简洁明了的理解二维数组。如下图。
这里写图片描述
但是,如果让画三维数组呢?在这个平面无法展现一个立体的情况,并且如果继续升维,四维五维等等。这就引起了我的思考。
我们都知道,数组在内存中的存储,都是线性的。所以无论是几位数组,我们都应该将其理解为线性,也就是一条线排列。那将如何展示呢?
如下图;我们定义一个二维数组 arr [4][4] 将数组一维化,分步解决,先理解arr [4][4] 其实是一个一维数组,里面存储了四个元素,而每个数组元素又是一个新的数组。
这里写图片描述
当我们展示完这个一维数组的元素后,我们再将这个数组的元素展开,也就是这个数组,如下图;
这里写图片描述
这样想的话,其实这个二维数组可以理解成,一个一维数组,里面存储了四个一维数组。而这四个数组相当于之前那个一维数组的元素。
进而可以类推,不管是几位数组,我们都可以认为是一维数组,这个一维数组里面存储着接下来的一维数组,一层一层推到最后,也就推出来了这个数组最终的元素。这样便与数组的线性存储一致了。
接下来,我们研究一个新的问题,就是数组传参问题。
大家都知道,一维数组传参时,需要降维,需要形参接收,这里形参接收的都是指针。这里的指针,便是数组元素类型的指针。

    int arr[4] = {1,2,3,4}
    这里如果接收这个数组,那么接收的便是一个整形类型的指针,因为数组内部存储的是一个整型类型。
    int arr [4][4]
    如果是一个二维数组呢?此时降维成什么?    根据上文所讲,如果将这个二维数组理解成一个一维数组里面存储着四个一维数组的话,那么降维传参后的指针类型必定是一个数组指针类型。结果正确吗?我们验证一下。

这里写图片描述
这里写图片描述
显而易见,是正确的。

本文是作者的简易理解,日后会有更加有深度的理解,日后会更新。如果有错误,还请包涵,并指出加以改正。谢谢大家了 !

原创粉丝点击