#const#const int *p 為何可以不初始化


摘自http://www.myexception.cn/cpp/1900041.html

const int *p 為什么可以不初始化?
c++ primer 5th  
P53 寫道:const 對象一旦創建后其值就不能再改變,所以const對象必須初始化。
但在 P57 中練習2.28的第(e)題為什么判斷為合法呢?為什么可以不用初始化呢?

(e)const int *p;           // legal. a pointer to const int


------解決思路----------------------


const int *p; // p是指針,指向const int類型數據
int * const p; // p是常指針,指向int類型數據
const int * const p; // p是常指針,指向const int類型數據


------解決思路----------------------
const 對象一旦創建后其值就不能再改變,所以const對象必須初始化。
LZ對於這句話中的const對象要弄清楚:
const int *p中,const對象是*p(即*p的值是只讀),而對於此句“const對象必須初始化”,一般用法中我們是要給指針p初始化,而不是給*p初始化。所以在此可以不初始化。即使在聲明是進行初始化(const int* p = 0x123456),也是在對指針p初始化,等價於如下一般用法:
對此的用法一般如下:
const int *p;
p = 0x123456;(此時是在給指針p賦值,而不是給*p賦值)

int* const p中,const對象是p,此時在指針p聲明時必須初始化。
一般用法:
int* const p = 0x123456;
------解決思路----------------------
遇到const修飾的指針,需要注意有兩種可能:
1、指針變量指向的值無法改變
2、指針變量本身無法改變
例如:


int a = 10;
const int *p;
p = &a;
*p = 3; // 錯誤,通過此指針改變指向的值
int b = 5;
p = &b; // 正確

int c = 10;
int * const p = &c;
*p = 5; // 正確
int d = 5;
p = &d; // 錯誤,指針變量不能改變


------解決思路----------------------
(1) int *p  -- p是個非const指針,指向的對象是int;
(2) const int *p  --  p是個非const指針,指向的對象是const int;
(3) int * const p  -- p是個const指針,指向的對象是int;
(4) const int * const p  -- p是個const指針,指向的對象是const int。
以上四個都是定義指針p,如果初始化是指初始化指針p,而不是它所指向的對象,由於(3)和(4)中指針p是const的,所以必須初始化。(1)和(2)中的指針p是非const的,可以不初始化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM