一 指向const对象的指针
1.
const double *p;
//p是一个指向double类型的const对象的指针
上面这个const限定了p所指向的对象类型,而并非p本身,即p本身并不是const,所以在定义时并不需要初始化
2.把一个const对象的地址赋给一个普通的、非const对象的指针会导致错误
const double pi=3.14;
double *p=pi;//错误
const double *p1=π//正确
3.不能使用void* 指针保存const对象的地址,而必须使用const void *类型的指针
const double pi=3.14;
const void *p=π//正确
void *p1=π//错误
4.允许把非const对象的地址赋给指向const对象的指针
const int *p;
int a=10;
p=&a;//正确
二 const指针
int a=10;
int * const p=&a;
p是指向int型对象的const指针,和其他const量一样,在定义的时候必须初始化。指针本身是const并没有说明是否能使用该指针修改它所指向的对象的值。
三 指向const对象的const指针
const double pi=3.14;
const double * const pi_ptr=π
在上面的语句中,既不能修改pi_ptr所指向的值,也不允许修改该指针的指向
四 指针和typedef
typedef string * pstring;
const pstring cstr;
cstr的类型是什么呢?大多数会认为是 const string *cstr 但这是错误的,正确的答案应该是string *const cstr 。声明const pstring 时,const修饰的是pstring的类型,这是一个指针,因此,该声明语句应该是把cstr定义为指向string类型对象的const的指针。