![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
上QQ阅读APP看书,第一时间看更新
6.2 二维数组
6.2.1 二维数组的一般形式
前面讲解一维数组是带着一对中括号的,也就是说带一个下标,现在讲讲二维数组。显然,二维数组带两对中括号,也就是说带两个下标。看看二维数组定义的一般形式:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p102_85582.jpg?sign=1739350793-TnHZoTDIEz6PK9MZPWkBuCkekxXlS5P6-0-8cf9878f702d91918fef16f7e9695ebd)
例如:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p102_85580.jpg?sign=1739350793-caiktJBjTVej0exxkPR1KWqHrZmiiyFV-0-1bac9ee9b3ef1b01b0f247f45c039529)
上面这行代码的含义:定义a为3行4列的数组,这种按几行几列的方式来理解二维数组的方式最朴素,也最容易理解。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P102_47470.jpg?sign=1739350793-QAfSQa6CQvzvWYOpNGyEQyhdStaGGEmR-0-2efb05c25b86b3501902a63201f630c6)
图6.4 将二维数组理解成含有多个元素的一维数组
也可以这样理解,把二维数组看成是一种特殊的一维数组,也就是说它的元素又是一个一维数组。例如针对a[3][4]这个二维数组,可以把a看成是一个一维数组,这个一维数组有三个元素,即a[0]、a[1]、a[2],每个元素(都看成是一个一维数组名)又是一个包含4个元素的一维数组,这个感觉可以参考图6.4。
所以,“floata[3][4];”就相当于定义了12个元素(3行4列),第一维下标能引用的范围是0~2,第二维下标能引用的范围是0~3,所以整个二维数组能够引用的元素如下,共12个元素:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p102_85581.jpg?sign=1739350793-fYW2JEAD7zFO9hSXBtY9MUVjOgHkkTvX-0-79c2bf5cb7d155306ca912fa9eec856c)
讲解一维数组时,感受可以参考图6.1,此时讲解二维数组时,感受可以参考图6.5。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P103_47478.jpg?sign=1739350793-b1DtP9Xkzz8bK39oaiXuUz34bpNNs010-0-22642b04e8f970d530ff8813998ccb89)
图6.5 int a[3][4]数组包含的元素示意图,注意第一维下标0~2,第二维下标0~3
在C语言中,二维数组的元素存放顺序是:按行存放。即在内存中先顺序存放第一行元素,再存放第二行元素,以此类推,所以,float a[3][4]这个二维数组在内存中存放数据看起来应该如图6.6所示。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P103_47484.jpg?sign=1739350793-trhQHzyoYnd6xzXlViDZybms9aDCjpFT-0-a0902fb8564416d244e8aef07de3a2b1)
图6.6 二维数组在内存中按行存放
有了对二维数组的理解,三维数组甚至多维数组就好理解了。例如,定义一个三维数组:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p103_85586.jpg?sign=1739350793-ZnWHZVpshqTs09Zej4Qmzdyem5KIAsuC-0-d2f3e65728c0a212577054775a46de30)
多维数组在内存中的排列顺序:第一维下标变化最慢,最右边维度的下标变化最快,例如上面这个三维数组,在内存中的排列顺序应该是这样:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p103_85588.jpg?sign=1739350793-3mCCyVgM6JKyyy8BzZ9Xyo2CqPAAtCzx-0-6fa85197bfbb23840eececdd7465169e)
在实际工作中,一维和二维数组常用,三维和多维数组用的都比较少。