const pointer 与 pointer to const
- 看左侧最近的部分;
- 如果左侧没有,则看右侧;
char const *pStr1 = "hello world";
const 修饰 char:pStr1 的指向(地址)可变,可以重新给 pStr1 赋值,指向的地址里面的内容是不可变的;
char *const pStr2 = strHelloWorld;
const 修饰 指针,pStr2 的指向不可变,不能重新给 pStr2 赋值,pStr2 指向的地址里面的内容是可变的;
char const *const pStr3 = "hello world";
pStr3 的指向不可变,不能重新给 pStr3 赋值,pStr3 指向的地址里面的内容也不可变;
int a = 123;
int *b = &a;
int **c = &b;
- * 操作符具有从右向左的结合性
- *c 得到的是 c 指向的位置,即 b,**c 相当于 *b,得到变量 a 的值
- 未初始化和非法的指针
int *a;
*a = 12;
- 定位到一个非法地址,程序出错;
- 定位到一个可以访问的地址,无意修改了它,这种错误难以捕获,引发错误;
- NULL 指针
- 特殊的指针变量,表示不指向任何内容;
- 野指针
- 指向”垃圾“内存的指针。
- 指针变量没有初始化;
- 已经释放不用的指针没有置为 NULL,如 delete 和 free 之后的指针;
- 指针操作超越了变量的作用范围;
指针使用的注意事项:
- 没有初始化的,不用或者超出操作范围的指针置为 NULL