其實在教材中也說了,使用const限定符可以強制改變訪問的許可權。
const指標表示指標本身是乙個常量。由於指標是物件,因此就像其他物件一樣,允許把指標本身定為常量。cosnt指標必須初始化,並且一旦初始化,const指標的值就不能改變了。const指標的值到底是什麼?其實就是存放在指標中的位址,這個位址是乙個物件的位址。
如果指標指向const物件,則不允許用指標來改變其所指的const值。為了保證這個特性,c++語言強制要求指向const物件的指標也必須有const特性。
#include #include using namespace std;
int main()
在上文中說了const特性這個詞,那麼什麼是const特性?
不存在變數提公升現象。
暫時性死區。
不可重複宣告。
宣告的是唯讀常量,宣告時必須初始化。
本質儲存的是記憶體位址,簡單型別資料的值就儲存在這個位址中,復合型別資料在這個位址中儲存的是乙個指標,這個指標指向的物件可以改變,單指標不可改變。
用於指標的兩種情況,const是乙個左結合的型別修飾符
2.限定函式的傳遞值引數
3.限定函式返回值
4.限定函式型別
在c++限定符中有左值和右值,可以說是乙個表示式,表示式左邊式左分量,也稱左值,可以作為左運算元。也可以作為右運算元
const double pi = 3.14; // pi是乙個常量,不能改變它的值
const double *cptr = π //cptr指向pi,注意這裡的const不能丟,因為普通指標不能指向常量
*cptr = 3.33; //錯誤,試圖改變所指物件的值。不能給*cptr賦值,即不能改變指標所指物件的值
cout << cptr << endl;//輸出cptr的值
//雖然不能改變其所指物件的值,但是它可以指向別的常量物件
cosnt double pi2 = 6.28;
cptr = &pi2; //正確 *cptr為6.28
cout << cptr << endl; //cptr的值變了
從右往左讀,遇到p就替換為「p is a」,遇到*就替換為「point to」,其餘不變。下面我們來乙個乙個看:
1. const int p; // p is a int const. p是乙個int型常量 這個很簡單
2. const int *p; //p is a point to int const. p是乙個指標,指向int型常量。即p是乙個指向int型常量的指標。
3. int const* p; //與2相同 const int 和 int const 是一樣的意思。《c++ primer》中採用第一種寫法。
4. int * const p; // p is a const point to int. p是乙個指向int的const指標
5. const int * const p; //p is a const point to int const. p是乙個指向int型常量的const指標。
6. int const * const p; //同5
c 指標 陣列 陣列指標以及const限定符
今天被指向字串陣列的指標怎麼寫給搞懵了,索性花點時間把一堆指標給梳理了一下。從最簡單的開始,指向變數和陣列的指標。注釋裡常指標代表指標本身是常量 網上有各種不同的說法所以我直接用了自己習慣的叫法 單一指標 int a 1 int b 2 const int c 3 int p1 a 指向變數的變指標...
指標和const限定符
const int p 1,表示p指向乙個整型變數,並且該變數為const的。2,可以更改p的值,不可以更改它所指向物件的值。3,它可以指向非const型別的int變數 int const p 1,表示p指向乙個整型變數,該變數為非const的 2,不可以更改p的值,一旦初始化不可更改,單可以更改它...
指標和const限定符
1 指向const物件的指標 const double pi 3.14 double ptr error ptr is a plain pointer const double cptr ok cptr is a pointer to const 不能用void 指標儲存const物件的位址,而必須...