03.const指针

03.const指针

const与指针共有3中组合

  • const TYPE* / TYPE const* 表示不能修改指针指向的内容,指针本身可以修改
  • TYPE* const表示该指针是一个常量,意味指针本身不能被修改,但是指针指向的内容可以被修改
  • const TYPE* const表示指针指向的内容及指针本身都不可以被修改
const char* p1 = "Hello World!";
char const* p2 = "Hello World!";
char* const p3 = "Hello World!";

p1[0] = 'a';//错误,常量指针,指针指向的内容不能被修改
p2[0] = 'a'; 
p1 = nullptr;//正确,常量指针,指针本身可以被修改

p3[0] = 'a';//正确,指针常量,指针指向的内容可以被修改
p3 = nullptr;//错误,指针常量,指针本身不可以被修改

指针常量和常量指针如何记忆?

const TYPE* / TYPE const*:const翻译为常量, TYPE翻译为指针,所以叫做常量指针
TYPE
const: TYPE*翻译为指针,const翻译为常量,所以叫做指针常量

指针常量和常量指针的功能如何区分?

const TYPE * p:const后面是* , 所以带 *的操作都不允许使用(解引用,访问指向内存)
TYPE * const p: const后面是p,所以带p的操作都不允许使用(改变指针指向)

const_cast类型转换

  • 与c中强制类型转换做对比
const  int n = 5;
int* p = &n;//错误,因为n为const int类型,而p为int*类型,不能直接转化
//c中的常用强制转换来实现
int* p = (int*)&n;
//c++中一般使用const_cast<>实现
int* p = const_cast<int*>(&n);
  • 使用const_cast与强制类型转换相比的好处就是,强制类型转换可以转换为任意类型,而const_cast仅用于去除const修饰,但是从功能实现上两者是一致的

猜你喜欢

转载自blog.csdn.net/m0_45388819/article/details/113813560