# 一维与多维数组

URL: https://caijiao.org/cpp/function/arrays
Source: docs/cpp/function/arrays.md
Description: 本节将介绍 C++ 中的一维和多维数组。你将了解如何声明、初始化以及访问数组元素，并学习一维和多维数组的常见操作。

在 C++ 中，**数组**是一种用于存储相同类型数据的集合。数组中的元素通过索引来访问，索引从 0 开始。数组可以是**一维的**（只有一行数据），也可以是**多维的**（有多个数据维度）。本节将详细介绍如何在 C++ 中使用一维和多维数组。

## 一维数组

### 声明与初始化

一维数组用于存储多个相同类型的元素，声明时需要指定数组的大小。

```cpp
#include <iostream>
using namespace std;

int main() {
    // 声明并初始化一个包含 5 个整数的数组
    int arr[5] = {1, 2, 3, 4, 5};

    // 访问数组元素
    cout << "第一个元素: " << arr[0] << endl;  // 输出: 1
    cout << "第二个元素: " << arr[1] << endl;  // 输出: 2

    // 遍历数组并输出所有元素
    for (int i = 0; i < 5; i++) {
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }

    return 0;
}
````

### 输出：

```
第一个元素: 1
第二个元素: 2
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
```

### 默认初始化

如果未为数组提供初始化值，C++ 会将其初始化为**零**（对于全局数组）或**未定义的垃圾值**（对于局部数组）。

```cpp
int arr[5]; // 未初始化的局部数组，值是未定义的
```

## 多维数组

### 二维数组

二维数组可以看作是数组的数组，常用于表示矩阵或表格数据。声明时，需要指定行数和列数。

```cpp
#include <iostream>
using namespace std;

int main() {
    // 声明并初始化一个 2x3 的二维数组
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};

    // 访问二维数组元素
    cout << "arr[0][0] = " << arr[0][0] << endl;  // 输出: 1
    cout << "arr[1][2] = " << arr[1][2] << endl;  // 输出: 6

    // 遍历二维数组
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cout << "arr[" << i << "][" << j << "] = " << arr[i][j] << endl;
        }
    }

    return 0;
}
```

### 输出：

```
arr[0][0] = 1
arr[1][2] = 6
arr[0][0] = 1
arr[0][1] = 2
arr[0][2] = 3
arr[1][0] = 4
arr[1][1] = 5
arr[1][2] = 6
```

### 三维数组

三维数组是更高维度的数组，通常用于表示三维空间中的数据。

```cpp
#include <iostream>
using namespace std;

int main() {
    // 声明并初始化一个 2x2x2 的三维数组
    int arr[2][2][2] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};

    // 访问三维数组元素
    cout << "arr[0][0][0] = " << arr[0][0][0] << endl;  // 输出: 1
    cout << "arr[1][1][1] = " << arr[1][1][1] << endl;  // 输出: 8

    return 0;
}
```

### 输出：

```
arr[0][0][0] = 1
arr[1][1][1] = 8
```

### 动态分配数组

C++ 允许使用 `new` 关键字来动态分配数组，可以用于创建不定大小的数组。

```cpp
#include <iostream>
using namespace std;

int main() {
    // 动态分配一维数组
    int* arr = new int[5];

    // 初始化数组元素
    for (int i = 0; i < 5; i++) {
        arr[i] = i + 1;
    }

    // 输出数组
    for (int i = 0; i < 5; i++) {
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }

    // 释放动态分配的内存
    delete[] arr;

    return 0;
}
```

## 小结

* **一维数组**：用于存储多个相同类型的元素，访问时通过索引。
* **多维数组**：数组的数组，常用于表示矩阵或表格数据，可以是二维、三维及更高维度。
* **动态数组**：使用 `new` 关键字进行动态分配，适用于大小不确定的数组。
* 在使用数组时，特别是在动态分配数组时，要确保释放内存（使用 `delete[]`）。

数组是 C++ 中非常重要的数据结构之一，理解数组的声明、初始化和使用方式将帮助你处理各种复杂的算法问题。
