Long long ago,我们讲到了数组《聊一聊数组背后的那点事》,这个已经是迈进指针的第一步了,主要的内容是一维数组,今天我们将讲述二维数组。当结束了今天的内容之后就会开启指针部分的内容。指针可以说是C语言的灵魂啦,如果真的想搞定指针,一定要好好学习本节课的内容,并且好好回顾一下上节课的内容哦~
1
二维数组的定义
定义二维数组的方法跟一位数组相似,使用方括号指定每个维度的元素个数:
其实可以很形象的将二维数组想象成一个平面,如下所示分别对应着 5*5,4*5 和 6*3 大小的二维数组。
但是这只是一种想象,因为实际上二维数组在内存中是以线性的方法进行存储的,如下图为一个 int b[4][5]; 大小的数组在内存中存储示意图
如上图所示,其中的 b[0] 表示 int b[4][5]; 中的第一行中的元素,同理b[1], b[2], b[3] 表示第二行,第三行和第四行中的元素。在上图中的第二行可以看到 b[0] 中具体存储的是第一行中的 5 个元素(b[0][0] 到 b[0][4]),b[1] 里面所储存的就是 b[1][0] 到 b[1][4] 5 个元素。可以看到,我们虽然将数组定义为了二维的形式,但是在内存中仍然是以线性的形式进行存储。
到目前已经讲了一维数组和二维数组在内存中是如何存储的了,那三维数组或者多维数组呢?思考一下,期待在留言中看到你的答案哦~
2
二维数组的初始化
二维数组主要提供了以下几种初始化的方式
对于上面代码中的两种方式,我们更推荐第二种方式。因为第二种方式更加直接,虽然占用空间变大了,但是也更容易被理解。
上面的这段代码将对数组中第每一行的第一个元素进行赋值,其余的部分将自动补零。
2
二维数组的访问
二维数组的访问的具体方式如下
跟访问一维数组相似,同样是使用下标访问数组中的元素。同样需要注意下标的取值范围,以防止数组的越界访问。比如 int a[3][4],其“行下标”的取值范围是 0~2,“列下标”的取值范围是 0~3,超出任何一个下标的访问都会造成越界。
今天的内容就先到这里啦,接下来的文章很多都是烧脑文章哦,什么指向指针的指针,数组指针与指针数组的区别,数组名和指针……各种奇奇怪怪像绕口令一样的问题会接踵而至,我准备好了,你呢~
3
参考
[1] “小甲鱼” 视频课程《带你学C带你飞》【第一季】P20