一 指向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的指針。