C++中,数组和指针是非常重要的概念,特别是在处理字符和字符串方面更加常见。本篇攻略将从字符、字符串、字符数组、指针等多个维度深入剖析它们之间的关系和区别,以及在实际使用中该如何注意。
1. 字符和字符串
1.1 字符
在C++中,字符是以ASCII编码方式存储的,每个字符占1个字节(8位),用单引号' '表示。例如:
char ch = 'A'; // 定义字符变量,赋值A
1.2 字符串
字符串是由字符组成的一串字符序列,用双引号" "表示,最后还有一个'\0'(空字符)表示字符串的结束。例如:
char str[] = "Hello World!"; // 定义并初始化字符串变量
注意:字符串的末尾有一个'\0'字符,它并不是字符串的一部分,只是用于表示字符串的结束。
2. 字符数组
字符数组是由若干个字符组成的数组,可以表示一个字符串,也可以表示一组字符。例如:
char arr[] = {'H','e','l','l','o','\0'}; // 定义并初始化字符数组,表示字符串 Hello
此处'\0'字符表示字符串的结束。
3. 指针
指针是一个变量,它存储了一个地址。可以通过指针来访问或修改该地址对应的内存中的数据。例如:
char *p; // 定义一个字符指针变量 p
4. 字符/字符串与指针的关联
4.1 字符指针
字符指针指向一个字符变量的地址。我们可以通过指针来操作字符变量,也可以通过指针来访问字符串的每一个字符。例如:
char ch = 'A';
char *p = &ch; // 定义字符指针 p,指向字符变量 ch
cout << *p << endl; // 输出 A
此处,'*p'表示指针p所指向的内存地址所存储的值,即字符变量ch的值。
4.2 字符串指针
字符串指针指向一个字符数组的首地址,可以通过指针来访问字符串的每一个字符。例如:
char str[] = "Hello World!";
char *p = str; // 定义指针 p,指向字符串 str 的首地址
cout << *p << endl; // 输出 H
此处,'*p'表示指针p所指向的内存地址所存储的值,即字符数组str的第一个字符'H'。
4.3 字符串指针的加减操作
由于字符串是以字符数组的形式存在,所以字符串指针也具有与数组一样的特性,即可以进行指针的加减操作。例如:
char str[] = "Hello World!";
char *p = str; // 定义指针 p,指向字符串 str 的首地址
p += 6; // 将指针 p 调整到字符串 str 中第 6 个字符位置,即 W
cout << *p << endl; // 输出 W
4.4 字符/字符串变量的地址
我们可以通过&符号,获得字符或字符串变量的内存地址。例如:
char str[] = "Hello World!";
cout << &str << endl; // 输出 str 的内存地址
5. 示例说明
5.1 示例1
在这个示例中,我们将通过指针来访问和修改字符串。具体代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char str[] = "Hello World!";
char *p = str; // 定义指针 p,指向字符串 str 的首地址
cout << "Original string: " << str << endl; // 输出原始字符串
*p = 'h'; // 修改第一个字符为小写h
cout << "New string: " << str << endl; // 输出新字符串
return 0;
}
输出结果为:
Original string: Hello World!
New string: hello World!
以上代码,我们通过指针 *p 来访问字符串 str 的第一个字符,将其修改为小写h。然后再将字符串 str 输出,发现已经被修改。
5.2 示例2
这个示例中,我们将通过字符数组来进行字符串操作。具体代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char str[] = "Hello World!";
char arr[] = {};
strcpy(arr, str); // 复制字符串 str 到字符数组 arr 中
cout << "Original string: " << str << endl; // 输出原始字符串
cout << "New string: " << arr << endl; // 输出新字符串
return 0;
}
输出结果为:
Original string: Hello World!
New string: Hello World!
代码中,我们定义了一个空的字符数组 arr,并通过库函数strcpy()将字符串 str 复制到字符数组arr中,最后输出复制后的字符串arr。
6. 总结
通过以上讲解和示例,我们对字符、字符串、字符数组和指针之间的关系和区别有了更加深入的了解。在C++编程过程中,需要注意以下几点:
- 字符数组和字符串的内存必须预留长度,以便存储'\0',表示字符串结束
- 操作字符数组时,需要考虑内存长度等细节问题
- 字符串指针可以实现指针的加减操作
- 字符指针可以用于字符串操作
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++指针和数组:字符和字符串、字符数组的关联和区别 - Python技术站