目录

  1. 数组概述
  2. 数组声明与定义
  3. 数组初始化
  4. 多维数组
  5. 数组与指针
  6. 数组的大小与越界
  7. 常见的数组操作
  8. 参考资料

1. 数组概述

在 C++ 中,数组(Array)是一种数据结构,可以存储多个相同类型的数据。数组中的元素是连续存储的,因此可以通过索引来访问。数组具有固定的大小和类型,大小在定义时必须确定。

数组通常用于存储具有相同数据类型的数据集合,例如多个整数、浮点数等。它是一种静态数据结构,意味着其大小在编译时就被确定,并且在程序运行期间不能动态更改。


2. 数组声明与定义

2.1 声明数组

声明数组时需要指定数组的类型和元素个数,数组的元素类型必须相同。

语法:

类型 数组名[大小];

2.2 定义数组

定义数组时,除了声明外,还可以在定义时给数组赋初始值。

示例:

#include <iostream>
using namespace std;

int main() {
    // 声明一个包含 5 个整数的数组
    int arr[5];

    // 通过索引访问数组元素
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
    arr[3] = 40;
    arr[4] = 50;

    // 输出数组中的元素
    for (int i = 0; i < 5; i++) {
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }
    return 0;
}

输出:

arr[0] = 10
arr[1] = 20
arr[2] = 30
arr[3] = 40
arr[4] = 50


3. 数组初始化

数组在声明时可以进行初始化。如果未初始化,数组中的元素可能包含垃圾值。

3.1 默认初始化

当数组被声明并且初始化时,每个元素将获得一个特定的初值。

示例:

#include <iostream>
using namespace std;

int main() {
    // 声明并初始化一个整数数组
    int arr[5] = {1, 2, 3, 4, 5};

    // 输出数组中的元素
    for (int i = 0; i < 5; i++) {
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }
    return 0;
}

输出:

arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

3.2 部分初始化

如果只初始化部分元素,未初始化的元素将默认为零(对于基本数据类型)。

示例:

#include <iostream>
using namespace std;

int main() {
    // 初始化前 3 个元素,其他元素默认为 0
    int arr[5] = {1, 2, 3};

    // 输出数组中的元素
    for (int i = 0; i < 5; i++) {
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }
    return 0;
}

输出:

arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 0
arr[4] = 0

3.3 初始化为全零

可以使用 {} 来将数组初始化为全零。

示例:

#include <iostream>
using namespace std;

int main() {
    // 声明并初始化一个全零数组
    int arr[5] = {};

    // 输出数组中的元素
    for (int i = 0; i < 5; i++) {
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }
    return 0;
}

输出:

arr[0] = 0
arr[1] = 0
arr[2] = 0
arr[3] = 0
arr[4] = 0


4. 多维数组

C++ 支持多维数组,常见的是二维数组。例如,矩阵、表格等数据可以用二维数组表示。

4.1 二维数组

二维数组是数组的数组,通常用于存储行和列的矩阵数据。

示例:

#include <iostream>
using namespace std;

int main() {
    // 声明并初始化一个 2x3 的二维数组
    int arr[2][3] = {{1, 2, 3}, {4, 5, 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[0][1] = 2
arr[0][2] = 3
arr[1][0] = 4
arr[1][1] = 5
arr[1][2] = 6


5. 数组与指针

数组在 C++ 中与指针密切相关。数组名本身是指向数组第一个元素的指针,数组元素可以通过指针进行访问。

示例:

#include <iostream>
using namespace std;

int main() {
    int arr[3] = {10, 20, 30};
    
    // 使用指针访问数组元素
    int* ptr = arr;
    
    cout << "arr[0] = " << *ptr << endl;       // arr[0]
    cout << "arr[1] = " << *(ptr + 1) << endl;  // arr[1]
    cout << "arr[2] = " << *(ptr + 2) << endl;  // arr[2]

    return 0;
}

输出:

arr[0] = 10
arr[1] = 20
arr[2] = 30


6. 数组的大小与越界

C++ 中的数组大小是固定的,一旦声明就不能更改。如果访问超出数组边界的元素,会导致未定义行为。

示例:

#include <iostream>
using namespace std;

int main() {
    int arr[3] = {1, 2, 3};

    // 正常访问数组元素
    cout << "arr[0] = " << arr[0] << endl;

    // 越界访问,未定义行为
    cout << "arr[5] = " << arr[5] << endl;  // 错误!

    return 0;
}

注意: 上述代码访问越界的数组元素 arr[5] 会导致程序出现未定义行为。


7. 常见的数组操作

7.1 数组排序

C++ 提供了标准库 <algorithm> 中的 sort 函数来对数组进行排序。

示例:

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int arr[5] = {5, 3, 8, 1, 2};

    // 排序数组
    sort(arr, arr + 5);

    // 输出排序后的数组
    for (int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

输出:

1 2 3 5 8

7.2 数组反转

数组反转可以通过 reverse 函数来实现。

示例:

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};

    // 反转数组
    reverse(arr, arr + 5);

    // 输出反转后的数组
    for (int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

输出:

5 4 3 2 1


8. 参考资料


总结

C++ 中的数组是一种重要的数据结构,能够帮助我们存储和操作多个相同类型的元素。了解如何声明、定义和初始化数组,以及如何使用多维数组和指针来操作数组,将大大提高编程效率。在编写程序时,避免数组越界访问,确保程序的稳定性和正确性。