C++教程

浏览4314
更新时间2025-08-05

多维数组

多维数组就是数组的数组。

要声明一个多维数组,需要定义变量类型,指定数组名称,后面跟上方括号,方括号内指定主数组的元素数量,然后再跟上一对方括号,指示子数组的元素数量:

string letters[2][4];

与普通数组一样,您可以使用数组字面量(花括号内的逗号分隔列表)来插入值。

在多维数组中,数组字面量中的每个元素都是另一个数组字面量。

string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

数组声明中的每对方括号都会为数组增加一个维度。像上面这样的数组就有两个维度。

数组可以有任意数量的维度。数组的维度越多,代码就越复杂。以下数组有三个维度:

string letters[2][2][2] = {
  {
    { "A", "B" },
    { "C", "D" }
  },
  {
    { "E", "F" },
    { "G", "H" }
  }
};

访问多维数组的元素

要访问多维数组的元素,需要指定数组中每个维度的索引号。

以下语句访问 letters 数组第一行(0)第三列(2)的元素值。

实例

string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

cout << letters[0][2];  // 输出 "C"
运行实例 »

点击 "运行实例" 按钮查看在线实例

请记住:数组索引从 0 开始:[0] 是第一个元素。[1] 是第二个元素,依此类推。

更改多维数组中的元素

要修改元素的值,需要引用元素在每个维度中的索引号:

实例

string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};
letters[0][0] = "Z";

cout << letters[0][0];  // 现在输出 "Z" 而不是 "A"
运行实例 »

点击 "运行实例" 按钮查看在线实例

遍历多维数组

要遍历多维数组,您需要为数组的每个维度使用一个循环。

下例输出 letters 数组中的所有元素:

实例

string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

for (int i = 0; i < 2; i++) {
  for (int j = 0; j < 4; j++) {
    cout << letters[i][j] << "\n";
  }
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

此例显示如何遍历三维数组:

实例

string letters[2][2][2] = {
  {
    { "A", "B" },
    { "C", "D" }
  },
  {
    { "E", "F" },
    { "G", "H" }
  }
};

for (int i = 0; i < 2; i++) {
  for (int j = 0; j < 2; j++) {
    for (int k = 0; k < 2; k++) {
      cout << letters[i][j][k] << "\n";
    }
  }
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

为什么使用多维数组?

多维数组非常适合表示网格。

以下实例展示了它们在实际应用中的用途。在这个例子中,我们使用多维数组来表示一个小型的战舰游戏:

实例

// 我们用 "1" 表示有船。  
bool ships[4][4] = {  
  { 0, 1, 1, 0 },  
  { 0, 0, 0, 0 },  
  { 0, 0, 1, 0 },  
  { 0, 0, 1, 0 }  
};  
  
// 使用这些变量跟踪玩家命中的次数和他们玩了多少轮  
int hits = 0;  
int numberOfTurns = 0;  
  
// 允许玩家继续游戏,直到他们击中所有四艘船  
while (hits < 4) {  
  int row, column;  
  
  cout << "选择坐标\n";  
  
  // 询问玩家要选择哪一行  
  cout << "选择0到3之间的行号:";  
  cin >> row;  
  
  // 询问玩家要选择哪一列  
  cout << "选择0到3之间的列号:";  
  cin >> column;  
  
  // 检查这些坐标上是否有船  
  if (ships[row][column]) {  
    // 如果玩家击中了船,则通过将值设置为零来移除它。  
    ships[row][column] = 0;  
  
    // 增加命中计数器  
    hits++;  
  
    // 告诉玩家他们击中了一艘船以及还剩下多少艘船  
    cout << "击中!还剩下 " << (4-hits) << " 艘船。\n\n";  
  } else {  
    // 告诉玩家他们未击中  
    cout << "未击中\n\n";  
  }  
  
  // 计算玩家玩了多少轮  
  numberOfTurns++;  
}  
  
cout << "胜利!\n";  
cout << "您在 " << numberOfTurns << " 轮内获胜";
运行实例 »

点击 "运行实例" 按钮查看在线实例

相关视频

更多

免费

php8,我来也
初级php8,我来也

321849次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

382470次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

282865次学习

收藏

免费

简单聊聊PHP创业那点事
初级简单聊聊PHP创业那点事

13418次学习

收藏
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号