【指针常量和常量指针的区别】

指针常量和常量指针的区别

指针常量

指针常量可以理解为——指针类型的常量,顾名思义,指针常量实际上为一个常量,只不过是指针类型修饰的。

格式:

int* const p //指针常量

案例:

int a = 1;
int b = 2;
int* const p = &a;
cout << "a的地址:" << &a << endl;
cout << "p的地址:" << p << endl;
cout << "p的值:" << *p << endl;
//p = &b //错误
*p = 10;
cout << "p的值:" << *p << endl;
a = 20;
cout << "p的值:" << *p << endl;

输出:

a的地址:010FF930
p的地址:010FF930
p的值:1
p的值:10
p的值:20

首先,定义两个变量a和b。其次,定义一个指针常量p,并将变量a的地址赋给p。由输出结果可以看出,p成功的指向了a的地址。此时,将b的地址赋给p,发现出错,错误如下:
在这里插入图片描述
由此可以发现,当指针常量p的地址确定后便不能进行修改。但是同时实验可以看出,虽然地址无法修改,但是指针指向的值可以进行修改。

常量指针

常量指针可以理解为——指向一个常量的指针,顾名思义,其本质为一个指针,并且这个指针是一个指向常量的指针。

格式:

const int* p //常量指针

案例:

int a = 1;
int b = 2;
const int* p = &a;
cout << "a的地址:" << &a << endl;
cout << "p的地址:" << p << endl;
cout << "p的值:" << *p << endl;
p = &b;
cout << "p的地址:" << p << endl;
cout << "p的值:" << *p << endl;
b = 3;
cout << "p的地址:" << p << endl;
cout << "p的值:" << *p << endl;
//*p = 10;//错误

输出:

a的地址:003DFA9C
p的地址:003DFA9C
p的值:1
p的地址:003DFA90
p的值:2
p的地址:003DFA90
p的值:3

同样,定义两个变量a和b,并将a的地址赋给常量指针p。此时通过输出结果可以发现,a和p的指向同一块地址。其次,将b的地址赋给p来改变p的指向,可以发现此时并未出错,通过输出发现p已经指向b所在的地址。并且对b的值进行修改时依旧可以正常输出。但是,b的值不能通过该指针修改,其原因是因为p为const int*型。


版权声明:本文为qq_43899283原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。