一、前言
前面循环章节适合批量重复逻辑,数组用于批量存储同类型数据,无需定义几十个独立变量。本篇覆盖一维数组、二维数组、字符数组,配套遍历、赋值、查找、排序基础案例,为后续指针、字符串铺垫。
二、一维数组基础
1. 定义语法
cpp
运行
数据类型 数组名[数组长度];
// 示例:存储5个学生分数
int score[5];
限制:数组长度必须是常量,不能用变量定义长度(C99 变长数组除外,标准 C++ 不推荐)。
2. 数组初始化三种写法
cpp
运行
// 写法1:全部赋值
int arr1[3] = {10,20,30};
// 写法2:部分赋值,剩余元素自动补0
int arr2[5] = {1,2}; // arr2[2]=0 arr2[3]=0 arr2[4]=0
// 写法3:省略长度,编译器自动根据初始化数量判定长度
int arr3[] = {5,6,7,8}; // 长度自动为4
3. 数组下标访问与遍历
数组下标从0开始,最大下标 = 数组长度 - 1
cpp
运行
#include <iostream>
using namespace std;
int main()
{
int arr[5] = {11,22,33,44,55};
// for循环完整遍历数组
for(int i = 0; i < 5; i++)
{
cout << arr[i] << " ";
}
return 0;
}
4. 实战:求数组最大值、平均值
cpp
运行
int arr[6] = {85,92,78,90,66,88};
int max = arr[0];
int sum = 0;
for(int i = 0; i < 6; i++)
{
if(arr[i] > max) max = arr[i];
sum += arr[i];
}
double avg = sum / 6.0;
cout << "最高分:" << max << " 平均分:" << avg;
三、二维数组(表格 / 矩阵数据)
1. 定义与初始化
cpp
运行
// 行3行,每行4列
int table[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
2. 嵌套循环遍历二维数组
cpp
运行
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 4; j++)
{
cout << table[i][j] << "\t";
}
cout << endl;
}
适用场景:学生多科目成绩、矩阵运算、棋盘数据存储。
四、字符数组(C 风格字符串)
1. 基础定义
C 语言风格字符串本质是以\0空字符结尾的 char 数组
cpp
运行
// 自动末尾补'\0'
char str1[] = "hello";
// 手动赋值字符,必须手动添加结束符
char str2[6] = {'a','b','c','d','e','\0'};
2. 输入输出字符数组
cpp
运行
#include <iostream>
using namespace std;
int main()
{
char name[20];
cout << "输入姓名:";
cin >> name;
cout << "你的姓名:" << name;
return 0;
}
⚠️ 缺陷:cin 读取遇到空格自动截断,带空格文本无法完整读取。
3. cstring 库字符串工具函数
引入头文件 #include <cstring>
cpp
运行
char str[30] = "coding";
strlen(str); // 获取字符串有效长度(不含\0)
strcpy(str, "new text"); // 字符串拷贝
strcat(str, "_cpp"); // 字符串拼接
strcmp(str1, str2); // 字符串比较,相等返回0
五、std::string 标准字符串(C++ 推荐)
字符数组操作繁琐,string是封装好的字符串类,无需关心结束符、长度。
1. 基础用法
cpp
运行
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "C++学习";
string s2 = "数组与字符串";
// 拼接直接用+
string s3 = s1 + " " + s2;
cout << s3 << endl;
// 获取长度
cout << "字符串长度:" << s3.size() << endl;
// 按下标访问单个字符
cout << s3[0];
return 0;
}
2. string 常用成员方法
cpp
运行
string text = "HelloCPlus";
text.size(); // 返回字符数量
text.empty(); // 判断是否为空字符串
text.substr(1,3); // 截取:从下标1开始,取3个字符
text.find("CPlus"); // 查找子串,返回下标,找不到返回-1
text.replace(0,5,"Hi"); // 替换指定区间文本
3. 读取带空格的整行文本
cpp
运行
string msg;
cout << "输入一段带空格文字:";
getline(cin, msg);
cout << msg;
六、新手高频易错点
数组下标越界:访问
arr[5]但数组仅长度 5(最大下标 4),程序崩溃或乱码字符数组忘记
\0结束符,输出乱码使用
==直接比较 char 数组,无法正确匹配;char 数组必须用strcmp,string 可以直接==用变量定义数组长度,标准 C++ 编译报错
cin读取字符串空格截断,带空格内容改用getline
七、综合实战:学生姓名 + 分数存储查询
cpp
运行
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name[4] = {"小明","小红","小李","小张"};
int score[4] = {95,88,72,91};
string searchName;
cout << "输入要查询的学生姓名:";
cin >> searchName;
bool findFlag = false;
for(int i = 0; i < 4; i++)
{
if(name[i] == searchName)
{
cout << searchName << " 的分数:" << score[i] << endl;
findFlag = true;
break;
}
}
if(!findFlag)
{
cout << "未找到该学生信息";
}
return 0;
}
八、下期预告
下一篇:C++ 函数完整教程:定义、形参实参、函数重载、作用域、递归入门