指针常量和常量指针复习
关于指针常量和常量指针,以前经常搞错,今天系统的整理一下。方便自己学习和复习,如大家发现问题随时指正,谢谢!
指针常量
指针常量即指针的指向是固定的,但可以通过指针修改指针指向的值。形式为:
int * const p = &a;
p为指针,const直接修饰指针p。
下面附上代码供参考。
int a = 10;
int b = 20;
int * const p = &a;
*p = 20; //正确 可以通过指针改变指针的指向值 a变为了20
cout<<a<<endl;
p = &b; //错误 指针常量的指针指向一旦初始化无法修改
常量指针
常量指针即指针指向的是常量,可以改变指针的指向,但无法通过该指针改变指针指向的值。形式为:
const int * p = &a;
或
int const * p = &a;
下面附上代码供参考。
int age = 39;
int year = 2020;
const int *d = &age;
d = &year; // 正确 常量指针可以改变指针的指向 *d变成了2020
cout<<*d<<endl;
*d = 200; //错误 常量指针无法改变指针指向的值
指向常量的指针常量
指向常量的指针常量即指针的指向无法修改,指针指向的值也无法修改。形式为:
const int* const p = &a;
帮助记忆
指针常量和常量指针可以按照的位置区分,离变量名称更近则为指针常量,离指针类型名更近则为常量指针。如int * const p = &a;,const距变量名p更近,则为指针常量;const int * p 和int const p,cosnt和变量名p之间隔了,距指针类型名int更近则为常量指针。
另外,还可以按照和const的位置来区分,int * const p中* 在const左侧,为指针常量。而const int * p 和int const p中const在 的左侧,为常量指针。