C++中,指向常量的指針和常量型指針很容易搞混和記錯。為了記憶,今天特此記錄下來,以便以後查看。 1. 指向常量的指針(point to const): (1)定義:通常是指向常量的指針,也就是指針指向的內容是個常量。 (2)格式:定義格式例如:const double * ptr 或者double ...
C++中,指向常量的指針和常量型指針很容易搞混和記錯。為了記憶,今天特此記錄下來,以便以後查看。
1. 指向常量的指針(point to const):
(1)定義:通常是指向常量的指針,也就是指針指向的內容是個常量。
(2)格式:定義格式例如:const double * ptr 或者double const * ptr形式。樣例代碼如下:
(3)特點:指針所指內容不可更改,指針地址可以更改
const double pi1 = 3.14; //pi1是個常量,它的值不能改變 const double pi2 = 3.1415; //pi2是個常量,它的值不能改變 double* ptr = &pi1; //錯誤:ptr作為普通指針,不能被初始化為一個指向常量的指針。 const double* ptrpi1 = &pi1; //正確:ptrpi1指向了常量pi1 double const* ptrpi2 = &pi1; //正確:ptrpi2指向了常量pi1 ptrpi1 = &pi2; //正確:常量指針的指針地址可以更改 *ptrpi1 = 3.1415; //錯誤:不能修改指針所指內容的值。
2. 常量型指針 (const point):
(1)定義:通常就是指指針本身存放的地址是常量,地址所指的內容未做限定。
(2)格式:例如:double * const ptr
(3)特點:a. 指針本身地址不可更改,指針所指內容可以更改
b. 必須定義時初始化,初始化之後,不能修改
double price = 0.5; double* const ptrPrice = &price; //ptrPrice將一直指向price,指針地址不能修改 *ptrPrice = 0.7; //正確:指針的所指的內容可以修改
3. 如果想定義一個所指內容和指針地址都不能修改的指針變數怎麼定義呢?
const double pi = 3.14; const double* const ccpi = π //ccpi是一個指向了常量內容的常量型指針。
4. 規律與總結
const在不同的位置,代表的意思就不同,很容易搞混,那麼有沒有有規律的辦法來理解和記憶呢?有,這就是從右向左或逆序理解法,就是從指針變數名開始,最靠近變數名的符號影響變數本身的類型,其餘部分,確定著變數所指向內容的類型。
例如: 第3個例子中,最靠近ccpi的是const,那麼就是說ccpi本身是個常量,緊接著是*,說明,ccpi是個常量型指針,double就是這個指針常量所指內容是double類型,最左邊的const就是說指針常量所指內容就是double類型的常量值。