字符指针和字符数组的区别
时间: 2023-07-20 22:30:41 浏览: 123
字符指针和字符数组在 C++ 中都可以用来存储字符串,但是它们有一些区别。
字符数组是一段连续的内存空间,可以存储一段固定长度的字符串。例如,下面的代码定义了一个长度为 6 的字符数组,可以存储一个长度为 5 的字符串:
```cpp
char str[6] = "hello"; // 字符数组定义和初始化
```
在内存中,字符数组实际上是一个以空字符(`\0`)结尾的字符序列,例如上面的字符串在内存中的存储方式为:
```
h e l l o \0
0x68 0x65 0x6c 0x6c 0x6f 0x00
```
可以通过数组下标或指针来访问数组中的元素,例如:
```cpp
char c = str[0]; // 获取第一个字符
char* p = str; // 获取指向字符串的指针
```
字符指针是一个指向字符序列的指针,可以指向一个字符数组或字符串常量。例如,下面的代码定义了一个指向字符数组的指针,也可以称为一个指向字符串的指针:
```cpp
char* str = "hello"; // 字符指针指向字符串常量
```
在内存中,字符串常量也是一个以空字符(`\0`)结尾的字符序列,它通常保存在程序的只读数据段或全局数据段中,例如上面的字符串常量在内存中的存储方式为:
```
h e l l o \0
0x68 0x65 0x6c 0x6c 0x6f 0x00
```
可以通过指针运算或指针解引用来访问字符序列中的元素,例如:
```cpp
char c = *(str + 0); // 获取第一个字符
char* p = str; // 获取指向字符串的指针
```
需要注意的是,字符指针指向的字符串常量通常是只读的,不能修改其中的内容,否则会导致程序运行时的错误。如果需要修改字符串中的内容,可以使用字符数组来存储字符串。
阅读全文