- 常量指針//指向const對象的指針
const int * ptr;//指向一個int類型常量的指針,const限制其指向對象的類型,並非 ptr本身
ptr 本身不是一個常量,不需要對其初始化。同時,也允許對其進行二次複製,使其指向另一個const對象。
唯一不行的就是,不能通過該指針修改其指向的const 對象
const int a = 1;
const int b = 2;
int c = 3;
ptr = &a;
prt = &b;// ok
ptr = &c;// ok
*ptr = 2;// error. can not change the b through ptr
int *d = NULL;
d = &a// error. invalid conversion from 'const int*' to 'int'
允許將一個非const對象的地址賦給指向const對象的指針,但不允許將const對象的地址賦值給一個普通的、非const對象的指針,這樣會導致編譯錯誤。
- 指針常量//const 指針
int const* ptr1;//指向int類型類型的常量指針,必須初始化
顧名思義,該指針值可以不可以修改,但可以修改該指針指向的對象的值。
int a = 1;
int *const prt1 = &a;
* ptr1 = 2;
- 指向const對象的const 指針
綜合上面兩點,可以理解這個東西 - 指針和typedef
typedef string *pstring;// pstring是一個 指向string類型的指針
const pstring cstr;// 真正代表的是 string *const cstr, 因爲 const修飾的是pstring類型,這是一個指針,因此該句聲明是把cstr定義爲指向string類型的const指針。
pstring const cstr;// 與 上面一句聲明一樣,比較難理解。