在 C++中,要声明多维数组,可指定每维包含的元素数。因此,要声明一个 int 二维数组,可以像下面这样做:
int solarPanels [2][3];
初始化相应的 int 数组,可以像下面这样做:
int solarPanels [2][3] = {{0, 1, 2}, {3, 4, 5}};
正如您看到的,初始化语法与初始化两个一维数组的语法类似。对于包含三行、三列的数组,初始化语法类似于下面这样:
int threeRowsThreeColumns [3][3] = {{-501, 206, 2016}, {989, 101, 206}, {303, 456, 596}};
注意:
虽然 C++让您能够模拟多维数组,但存储数组的内存是一维的。编译器将多维数组映射到内存, 而内存只沿一个方向延伸。 如果您愿意, 也可像下面这样初始化数组 solarPanels;这样做时各个元素的值与之前相同:
int solarPanels [2][3] = {0, 1, 2, 3, 4, 5};
然而,前面的初始化方法更佳,因为它让您更容易将多维数组想象为数组的数组。
可将多维数组视为由数组组成的数组。因此,对于包含三行、三列的二维 int 数组,可将其视为一个包含 3 个元素的数组,其中每个元素都是一个包含 3 个 int 元素的数组。
在需要访问该数组中的 int 时,可使用第一个下标指出该 int 所属的数组,并使用第二个下标指出该 int。请看下面的数组:
int threeRowsThreeColumns [3][3] = {{-501, 205, 2016}, {989, 101, 206}, {303, 456, 596}};
初始化方式让您能够将其视为三个数组,其中每个数组包含三个 int。其中,值为 205 的元素的位置为 [0][1]
,值为 456 的元素的位置为 [2][1]
。以下程序演示了如何访问该数组中的 int 元素:
#include
using namespace std;
int main()
{
int threeRowsThreeColumns [3][3] = \
{{-501, 205, 2011}, {989, 101, 206}, {303, 456, 596}};
cout << "Row 0: " << threeRowsThreeColumns [0][0] << " " \
<< threeRowsThreeColumns [0][1] << " " \
<< threeRowsThreeColumns [0][2] << endl;
cout << "Row 1: " << threeRowsThreeColumns [1][0] << " " \
<< threeRowsThreeColumns [1][1] << " " \
<< threeRowsThreeColumns [1][2] << endl;
cout << "Row 2: " << threeRowsThreeColumns [2][0] << " "\
<< threeRowsThreeColumns [2][1] << " " \
<< threeRowsThreeColumns [2][2] << endl;
return 0;
}
输出:
Row 0: -501 205 2016
Row 1: 989 101 206
Row 2: 303 45 6 596
分析:
注意到访问元素时将每行视为一个数组,从第 1 行开始(其索引为 0),到第 3 行结束(其索引为 2)。由于每行都是一个数组,因此第 10 行访问第 1 行的第 3 个元素(行索引为 0,元素索引为 2)。
注意:
在上面的示例代码中,随着数组包含的元素或维度数的增加,代码长度将激增。在专业开发环境中,这种代码实际上不可行。
其实有一种更高效的多维数组访问方式,它使用嵌套 for 循环来访问多维数组中的所有元素。使用 for 循环时,代码更短且不容易出错;另外,程序长度也不受数组包含的元素数的影响。
该文章会更新,欢迎大家批评指正。
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器