C++数组详细介绍

下面给你一个系统但简洁的 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)求函数内数组长度


相关推荐
死磕音视频8 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
WL学习笔记10 小时前
C & C++ 内存管理
c++·c++内存管理
顽疲10 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
宛 禾12 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
hetao173383712 小时前
联盟场-提高组-R7 & ZYZSC-S-Round 11
c++·算法
程序喵大人12 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)12 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
局部有解13 小时前
Hot100 - 三数之和
数据结构·c++·算法
学逆向的13 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全