跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C++ 字符数组
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C++字符数组 = '''字符数组'''是C++中用于存储字符序列的基础数据结构,本质上是将多个字符按顺序存储在连续内存中。由于C++兼容C风格字符串,字符数组在文本处理、文件操作和底层系统编程中广泛应用。本章将详细介绍字符数组的声明、初始化、操作以及与字符串的关系。 == 基本概念 == 字符数组是元素类型为<code>char</code>的一维数组,其特殊之处在于可以表示'''C风格字符串'''——以空字符<code>\0</code>结尾的字符序列。例如: <syntaxhighlight lang="cpp"> char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 显式包含终止符 </syntaxhighlight> 等价于: <syntaxhighlight lang="cpp"> char greeting[] = "Hello"; // 编译器自动添加\0 </syntaxhighlight> === 内存布局 === <mermaid> graph LR A[0: 'H'] --> B[1: 'e'] B --> C[2: 'l'] C --> D[3: 'l'] D --> E[4: 'o'] E --> F[5: '\0'] </mermaid> == 声明与初始化 == 字符数组有多种初始化方式: {| class="wikitable" |+ 初始化方法对比 ! 方式 !! 示例 !! 说明 |- | 逐个字符初始化 || <code>char arr[4] = {'A', 'B', 'C', '\0'};</code> || 需手动添加终止符 |- | 字符串字面量 || <code>char arr[] = "ABC";</code> || 自动添加\0(大小为4) |- | 部分初始化 || <code>char arr[5] = "Hi";</code> || 剩余元素填充\0 |} == 常用操作 == === 输入输出 === <syntaxhighlight lang="cpp"> #include <iostream> using namespace std; int main() { char name[50]; cout << "Enter your name: "; cin >> name; // 输入"Alice" cout << "Hello, " << name; // 输出"Hello, Alice" return 0; } </syntaxhighlight> === 标准库函数 === C++通过<cstring>头文件提供操作函数: {| class="wikitable" |+ 常用字符串函数 ! 函数 !! 作用 !! 示例 |- | <code>strlen()</code> || 获取长度 || <code>strlen("ABC") → 3</code> |- | <code>strcpy()</code> || 字符串复制 || <code>strcpy(dest, src)</code> |- | <code>strcat()</code> || 字符串连接 || <code>strcat(s1, s2)</code> |} == 与string类的对比 == {| class="wikitable" |+ 字符数组 vs std::string ! 特性 !! 字符数组 !! std::string |- | 内存管理 || 手动分配 || 自动调整 |- | 安全性 || 可能缓冲区溢出 || 边界检查 |- | 操作复杂度 || O(n) || 通常O(1) |} == 实际应用案例 == === 文件路径处理 === <syntaxhighlight lang="cpp"> #include <fstream> using namespace std; int main() { char filepath[256] = "/home/user/data.txt"; ifstream file(filepath); // 文件操作... return 0; } </syntaxhighlight> === 加密算法实现 === <syntaxhighlight lang="cpp"> void caesarCipher(char text[], int shift) { for (int i = 0; text[i] != '\0'; ++i) { if (isalpha(text[i])) { char base = islower(text[i]) ? 'a' : 'A'; text[i] = (text[i] - base + shift) % 26 + base; } } } </syntaxhighlight> == 注意事项 == * '''缓冲区溢出风险''':<code>char arr[5]; cin >> arr;</code> 输入超长会导致崩溃 * '''未终止字符串''':忘记<code>\0</code>可能引发未定义行为 * '''内存浪费''':固定大小数组可能分配过多空间 == 高级技巧 == === 多维字符数组 === 用于存储字符串集合: <syntaxhighlight lang="cpp"> const char* colors[3] = {"Red", "Green", "Blue"}; // 等效于: char colors[3][6] = {"Red", "Green", "Blue"}; </syntaxhighlight> === 指针运算 === 字符数组名可视为指针: <syntaxhighlight lang="cpp"> char str[] = "Hello"; char* p = str + 1; // 指向'e' </syntaxhighlight> == 数学表示 == 字符数组可视为有限字符序列: <math> S = \{s_0, s_1, ..., s_{n-1}, \0\} \quad \text{其中} \quad s_i \in \text{ASCII集} </math> == 总结 == 字符数组是C++底层文本处理的核心工具,虽然现代C++更推荐使用<code>std::string</code>,但在以下场景仍需字符数组: * 与C语言API交互 * 内存受限环境 * 需要直接操作内存的算法实现 掌握字符数组对于理解C++内存模型和字符串处理机制至关重要。 [[Category:编程语言]] [[Category:C++]] [[Category:C++ 数组]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)