下面给你一个系统但简洁的 C++ 数组入门讲解,适合初学者和复习用 👇
一、什么是数组
数组 :一组相同类型 的数据,在内存中连续存放。
每个元素通过 下标(索引) 访问,下标从 0 开始。
二、一维数组
1️⃣ 定义方式
int a[5]; // 定义长度为 5 的 int 数组
int b[5] = {1, 2, 3}; // 未赋值的元素自动补 0
int c[] = {1, 2, 3, 4}; // 长度由编译器推断
2️⃣ 访问与修改
a[0] = 10;
cout << a[0] << endl;
⚠️ 越界访问不会报错,但会导致未定义行为
a[5] = 100; // ❌ 危险!
3️⃣ 遍历数组
for (int i = 0; i < 5; i++) {
cout << a[i] << " ";
}
✅ 推荐写法(C++11):
for (int x : a) {
cout << x << " ";
}
三、多维数组(常见二维)
1️⃣ 定义
int arr[3][4]; // 3 行 4 列
2️⃣ 初始化
int arr[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
3️⃣ 遍历
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
四、字符数组 & 字符串
char s1[] = {'h', 'i', '\0'};
char s2[] = "hello"; // 自动加 '\0'
📌 常用函数(#include <cstring>):
strlen(s2); // 长度
strcpy(s1, s2); // 拷贝
strcmp(s1, s2); // 比较
✅ 现代 C++ 更推荐 std::string
五、数组与指针(重点)
数组名本质是指向首元素的指针:
int a[5];
int* p = a; // 等价于 &a[0]
*(p + 2) == a[2];
⚠️ 数组不是指针,只是"会退化为指针"
六、数组长度计算
int n = sizeof(a) / sizeof(a[0]);
❗ 不适用于函数参数中的数组(已退化为指针)
七、数组作为函数参数
void print(int arr[], int n) {
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
}
八、C++ 中更推荐的替代方案 ✅
| 场景 | 推荐 |
|---|---|
| 定长数组 | array<int, 5> |
| 动态数组 | vector<int> |
#include <array>
array<int, 5> a;
#include <vector>
vector<int> v = {1,2,3};
v.push_back(4);
九、常见错误总结
❌ 数组越界
❌ 使用未初始化数组
❌ 把数组直接赋值给另一个数组
❌ 用 sizeof(arr)求函数内数组长度