指针常量和常量指针

Posted 善良超锅锅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针常量和常量指针相关的知识,希望对你有一定的参考价值。

概念

常量指针:指向常量的指针。指针本身为普通变量,可以被重新赋值。指针指向的变量为常量,不可重新赋值。

指针常量:一个为常量的指针。指针本身为常量,指针的指向不可变,但指针指向的变量可以赋值。

声明形式

常量指针:int const *p1;或const int* p1; (const和int挨在一起)

指针常量:int* const p2;  (const和p2挨在一起)

实例

int a(1);
int b(2);
int const *p1 = &a;    //常量指针,p1可以重新赋值,p1指向的a不可重新赋值
int* const p2 = &b;    //指针常量,p2不可重新赋值,p2指向的b可以重新赋值
*p1 = 10;    //错误,p1指向的变量不能被赋值
p1 = &b;     //正确,p1可以被重新赋值
p2 = &a;     //错误,p2不能被重新赋值
*p2 = 20;    //正确,p2指向的变量可以被重新赋值

读法

这个读法能把变量声明方法、读法以及实际意义联系起来。具体规则如下:

看const和指针变量名与数据类型的距离,const挨谁近就对谁起作用,const挨谁近读谁。

把变量类型、*号、const、变量名都看成一个距离单位。比如 int const *p1,int离const距离为0,指针p1离const距离为1(隔了个*号),int离const近,所以读常量指针。

而int* const p2,指针p2离const比较近,所以读指针常量。

常量指针的另一声明形式为const int* p1,也适用这种读法。


开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于指针常量和常量指针的主要内容,如果未能解决你的问题,请参考以下文章

指针和引用指针常量与常量指针

指针常量常量指针和指向常量的常量指针

指针常量和常量指针

常(量)指针和指针常量

常量指针(pointer to constant)和指针常量(constant pointer)

常量指针和指针常量辨析