天天看點

C++Primer學習劄記_指針和const限定符

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

繼續閱讀