字符指针
- C语言中没有专门的字符串变量,可以用字符数组来保存字符串
char str1[] = "cppcourse";
- 这里的 str1 是字符数组变量,str1 保存了字符串 “cppcourse”
- 也可以用字符指针指向字符串常量。
char* str2 = "cppcourse";
- 这里的 str2 是字符指针变量,str2 并不保存字符串 “cppcourse” 本身,而是保存常量 “cppcourse” 的地址。
- 由于 str2 指向的是字符串常量 **”cppcouse”**,常量不能被更改,因而 str2[0] = ‘C’; 将引发错误
字符数组与字符指针的区别
char s[] = "hello";
修改为 char* s = "hello";
有何区别?
- 存储分配
字符数组,存储在栈上
字符指针,指针变量存储在栈上,指向的字符串常量存储在常量区
- 读写权限
字符数组的数据可读可写,字符指针指向的数据不可以写
- 初始化
字符数组初始化时,将字符串保存在字符数组保存的空间中。字符指针初始化时,仅仅把字符常量的地址保存在字符指针。
- 执行效率
字符数组,直接访问。字符指针,间接访问。因而字符数组的执行效率更高。
指针与const
- 指向常量的指针:
const int* p
,这里可以把*p看成常量 - 指针常量,也称为常指针
int *const p;
这里可以把p看成常量
指向常量的指针:
1 |
|
指针常量:
1 |
|
指针的使用原则
- 永远要清楚指针指向了哪里
- 杜绝空悬指针与野指针
- 空悬指针是指已经销毁的对象或已经回收的地址
- 野指针是指未初始化的指针