常量指標與指向常量的指標

2021-07-11 22:14:26 字數 1036 閱讀 6298

在日常交流中,當乙個 c++ 程式設計師說「常量指標(const pointer)」時,其實他表達的意思往往是「指向常量的指標(pointer to const)」。真不幸,這是兩個完全不同的概念。

t *pt = new t;

//乙個指向t的指標

const t *pct = pt;

//乙個指向const t的指標

t *const cpt = pt; //

乙個const指標,指向t

將const 修飾符放到指標宣告之前,應該想好,到底想叫什麼東西變成常量, 是指標?還是準備指向的那個物件?或兼而有之?

在 pct 的宣告之中,指標不是 const 的,但它所指向的物件被認為是 const 的。換句話說,const 修飾符修飾的是基礎型別 t 而不是指標修飾符 *。而對於 cpt 的宣告來說,宣告的是乙個指向乙個非常量物件的常量指標,即 const 修飾符修飾的是指標修飾符 *而不是基礎型別 t。

宣告中修飾符(即指標宣告中第乙個 * 修飾符之前出現的任何東西)的順序無關性進一步混淆了圍繞指標和常量的語法問題。例如,以下兩行**所宣告的變數的型別完全相同:

const t *p1;

//乙個指向常量t的指標

t const *p2;

//也是乙個指向常量t的指標

第一種形式更傳統一些,但如今許多 c++ 專家推薦使用第二種形式。理由在於,第二種形式不太容易被誤解,因為這種宣告可以倒過來讀,即「指向常量t的指標」。使用哪一種形式無關緊要,只要保持一致就行了。然而務必小心乙個常見的錯誤,即將常量指標的宣告與指向常量的指標的宣告混淆。

t const *p3;

//乙個指向常量的指標

t *const p4;

//乙個常量指標,指向非常量t

當然,可以宣告乙個指向常量的常量指標:

const t *const cpct1 = pt;

//二者均為常量

t const *const cpct2 =

cpct1;

//同上

常量指標與指向常量的指標

以下所有 測試的ide為code blocks16.01 常量指標是指指標變數本身不可以改變的指標,但是可以通過指標變數修改所指向的變數,常量指標不能指向常量 int number1 10 int number2 20 const int number 30 int const pnumber1 n...

常量指標與指向常量的指標

1 include2 void main 編譯結果 hello.c in function main hello.c 8 2 error assignment of read only location p1 p1 2 企圖改變a的值 非法 hello.c 9 2 error assignment ...

c 常量指標與指向常量的指標

這是兩個初學者容易混淆的概念。比如,t pt new t const t pct pt 指向常量 const t 的指標 t const cpt pt 常量指標,指向t 不過使用乙個引用比使用乙個常量指標更簡單 const t rct pt 不用const t const t rt pt 不用t c...