字符数组名本质是指向首元素的指针,可定义字符指针指向数组实现高效操作。2. 通过指针递增可遍历字符数组,直至遇到字符串结束符'\0',实现字符串的访问与处理。

在C++中,字符数组和指针密切相关,利用指针对字符数组进行操作是常见且高效的做法。理解数组名作为指针的特性,以及如何用指针遍历、修改和处理字符串,是掌握C++基础的重要部分。
字符数组与指针的关系
定义一个字符数组时,数组名本质上是一个指向首元素的指针。
例如:char str[] = "Hello";
这里 str 是一个字符数组,同时 str 的值就是数组首元素 'H' 的地址,即 &str[0]。
可以定义一个字符指针指向它:
char* ptr = str;
此时 ptr 指向字符 'H',可以通过指针访问后续字符。
使用指针遍历字符数组
通过递增指针,可以逐个访问字符数组中的每个元素,直到遇到字符串结束符 '\0'。
示例:
立即学习“C++免费学习笔记(深入)”;
char str[] = "World";
char* ptr = str;
while (*ptr != '\0') {
cout << *ptr;
ptr++;
}
这段代码输出 "World"。每次循环读取当前指针指向的字符,然后指针前移一位。
指针操作修改字符数组
字符数组的内容可以通过指针直接修改,前提是数组定义为可写(非字符串字面量)。
正确示例:
char str[] = "hello";
char* ptr = str;
*ptr = 'H'; // 修改第一个字符为 'H'
cout << str; // 输出 "Hello"
注意:以下写法是错误的:
char* str = "hello"; str[0] = 'H';—— 这会修改字符串字面量,导致未定义行为。
指针与数组下标等价性
在语法上,*(ptr + i) 等价于 ptr[i],也等价于 str[i]。
例如:
char str[] = "C++";
char* ptr = str;
cout << ptr[0]; // 输出 'C'
cout << *(ptr + 1); // 输出 '+'
cout << *(str + 2); // 输出 '+'
这种灵活性让指针成为处理字符串的有力工具。
基本上就这些。只要记住数组名可当作指针使用,指针可以遍历和修改字符数组内容,同时避免修改只读内存,就能安全有效地操作字符串。指针的移动和解引用是核心操作,熟练掌握后能写出简洁高效的代码。不复杂但容易忽略的是初始化方式和可写性判断。










