指针常量:int* const p const用于修饰p,所以p是常量,即指针指向的地址不能变,但是指针指向地址里面的数据可以变。
常量指针:const int *q const用于修饰(int *q),所以*q是int型常量,即指针指向地址里面的数据是不变的,但是指针的指向是可以变的。
记法:读法是从前往后读。const在前,*在后,就是常量指针;*在前,const在后就是指针常量。作用是看const修饰范围(后面是接的什么)
指针常量和常量指针的用法:
int a=10;
int b=20;
int* const p=&a;
const int* q=&b;
*p=b;//p是常量,所以p不能变,只有*p能变
q=&a;//*q是常量,*q不能变,q能变
const int* const r;//r所指向的内存中的数据和r的指向均不能改变
C++中的引用的本质就是指针常量,例如:
void fun(int &a)
{
a=5;
}
C++编译器在内部是这样实现上面的函数的
void fun(int* const a)
{
*a=5;
}