Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主页 C++ 简介 C++ 入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学 C++ 布尔值 C++ if...Else C++ Switch C++ While 循环 C++ For 循环 C++ Break/Continue C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 范围 C++ 递归

C++ 类

C++ 面向对象编程 C++ 类/对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++ 继承 C++ 多态性 C++ 文件 C++ 异常 C++ 日期

C++ 数据结构

C++ 数据结构 & STL C++ 向量 C++ 列表 C++ 堆栈 C++ 队列 C++ 双端队列 C++ 集合 C++ 映射 C++ 迭代器 C++ 算法

C++ 如何

C++ 加两个数字 C++ 随机数

C++ 参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 例子

C++ 例子 C++ 现实生活中的例子 C++ 编译器 C++ 练习 C++ 测验 C++ 证书


C++ 多维数组


多维数组

多维数组是数组的数组。

要声明多维数组,请定义变量类型,指定数组名称,后跟指定主数组有多少个元素的方括号,然后是另一个指定子数组有多少个元素的方括号。

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 行, 列;

  cout << "选择坐标\n";

  // 询问玩家要选择的行
  cout << "选择一个介于 0 和 3 之间的行号: ";
  cin >> 行;

  // 询问玩家要选择的列
  cout << "选择一个介于 0 和 3 之间的列号: ";
  cin >> 列;

  // 检查该坐标处是否有船只
  if (船只[行][列]) {
    // 如果玩家击中船只,则将值设置为零,从而将其移除。
    船只[行][列] = 0;

    // 增加命中计数器
    命中++;

    // 告知玩家他们击中了一艘船,并告知还有多少艘船
    cout << "命中! 还有 " << (4-命中) << " 艘。\n\n";
  } else {
    // 告知玩家他们未命中
    cout << "未命中\n\n";
  }

  // 计算玩家已经进行的回合数
  回合数++;
}

cout << "胜利!\n";
cout << "你在 " << 回合数 << " 回合内获胜";
运行示例 »

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.