C 指標使用const限定符以及指標讀法

2021-09-26 10:58:42 字數 1628 閱讀 7482

其實在教材中也說了,使用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物件的位址,而必須...