目录
- 数组概述
- 数组声明与定义
- 数组初始化
- 多维数组
- 数组与指针
- 数组的大小与越界
- 常见的数组操作
- 参考资料
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++ 中的数组是一种重要的数据结构,能够帮助我们存储和操作多个相同类型的元素。了解如何声明、定义和初始化数组,以及如何使用多维数组和指针来操作数组,将大大提高编程效率。在编写程序时,避免数组越界访问,确保程序的稳定性和正确性。
发表回复