/CPP

CPP

Primary LanguageC++

指针

const 与指针

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 的值

关于野指针

  1. 未初始化和非法的指针
int *a;
*a = 12;
  • 定位到一个非法地址,程序出错;
  • 定位到一个可以访问的地址,无意修改了它,这种错误难以捕获,引发错误;
  1. NULL 指针
  • 特殊的指针变量,表示不指向任何内容;
  1. 野指针
  • 指向”垃圾“内存的指针。
    1. 指针变量没有初始化;
    2. 已经释放不用的指针没有置为 NULL,如 delete 和 free 之后的指针;
    3. 指针操作超越了变量的作用范围;

指针使用的注意事项:

  • 没有初始化的,不用或者超出操作范围的指针置为 NULL