首先介绍一下:
指针的值,是指指针变量内存空间中的值,在这里也就是一个地址。
指针所指向地址的值,是指指针内存空间中的地址中的值。
eg:int a=50;
int *p=&a;
这里指针的值为变量a的地址,即&a;而指针所指向的值是指变量a的地址中的值,也就是50;1:指针常量
指针常量也就是所指针的值不变,也就是指向的地址不变。但所指向地址当中的值可以改变,也可通过解引用来改变它的值。
eg:int a=50;
int b=20;
int *const p=&a;
p=&b;//错误,p所指向的内存不能改变。
*p=30;//可以,可以通过指针运算符来改变指针所指向空间中的值;
a=40;//可以,指针所指向空间的值可以变。
2:常量指针
常量指针指指向空间中的值是对于指针来说是个常量,也就是说不能通过解引用来改变其值。
eg:int a=20;
int b=30;
const int *p=&a;//这里和int const *p=&a是一样的,同样是常量指针。
p=&b;//可以
*p=60;//不可以,不可以通过指针运算符来改变其值。
b=50;//可以
总结:指针常量和常量指针区别在于一个指向的地址不可以改变,一个不可以通过指针运算符来改变指向空间中的值,但都可以通过指向空间的变量来改变其中的值
3:const int*const p
这种形式是上面的指针常量和常量指针的综合体,也就是说其不能改变其指向空间的地址,也不能通过指针运算符来改变指向空间的值。
eg:int a=10;
int b=20;
const int *const p=&a;
p=&b;//错误
*p=50;//错误
a=40;//正确