![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=1738947572-SK1gPLWtmWQCKYbA2WWGFBxzLjX2fJgw-0-e9f9bf9be2ed6b0fb0ca5391e0b295e6)
例如:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p102_85580.jpg?sign=1738947572-4XV9cPtszoWKRMOu6bHxrLETWPaxPZCL-0-9e2c57cd399826766aca142d11df60fa)
上面这行代码的含义:定义a为3行4列的数组,这种按几行几列的方式来理解二维数组的方式最朴素,也最容易理解。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P102_47470.jpg?sign=1738947572-xnBLSMDggkG205Opo11ribpghEwKyOsb-0-f0b2a377a85cfe1e78123762fa6026a4)
图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=1738947572-1iLDUhrNou4PcnPn6w3mbosm6cvofw02-0-b2e4ea7886a17133041a4fab2a35e40f)
讲解一维数组时,感受可以参考图6.1,此时讲解二维数组时,感受可以参考图6.5。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P103_47478.jpg?sign=1738947572-WWIhjLC5K5vBHiBrM9GSV8c29MDyv0mf-0-5d0cd47d33c1d4f4516a030ff9c76f6c)
图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=1738947572-4G1qPZwZtD7LtZvwBuSXXJ0LwOX9PcAm-0-8ce24ce07ac2399fb8c28590c2b38de1)
图6.6 二维数组在内存中按行存放
有了对二维数组的理解,三维数组甚至多维数组就好理解了。例如,定义一个三维数组:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p103_85586.jpg?sign=1738947572-FKfrvXrryOsUYNiQr2o6MeySAGFb1weS-0-fb802f86aed9b5858b4399343aba66c2)
多维数组在内存中的排列顺序:第一维下标变化最慢,最右边维度的下标变化最快,例如上面这个三维数组,在内存中的排列顺序应该是这样:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p103_85588.jpg?sign=1738947572-W9SN9yMWOGecSmtNzu6JlPJqTBTbCxew-0-f823f6a43d4400e16c28905c5cd627b3)
在实际工作中,一维和二维数组常用,三维和多维数组用的都比较少。