const和一二級指標的結合

2021-10-09 14:45:08 字數 1481 閱讀 8127

const修飾的量常出現的錯誤:

1,常量不可以在作為左值。(直接修改常量的值)

2,不能把常量的位址洩露給乙個普通的指標或者普通的引用變數。(間接改變常量的值)

const和一級指標的結合

c++語言規範:const修飾的是離它最近的型別

const

int*p //*p不可以在被賦值,但是p可以被賦值,p沒有被任何修飾,可以任一指向不同的int型記憶體,但是不能通過指標間接修改指向的記憶體的值。

intconst

*p//和const int *p完全一樣

int*

const p//const修飾int *,直接修飾指標p,指標p是常量,不能再指向其他記憶體,但是可以通過指標的解引用修改指向的記憶體的值。

const

int*

const p//*p不能被賦值,p也不能被賦值

綜上,const和一級指標的結合有兩種情況:

1,const

int*p //const修飾指標指向

2,int

*const p//const修飾指標本身

總結const和指標的型別轉換的公式:

int * <= const int * 錯誤

const int * <= int * 正確

由圖可以看出,在編譯器看來int* p和int *const p本質上是沒有區別的,都是int *型。所以有下邊結論:

const如果右邊沒有指標(也就是沒有*),const是不參與型別的。

const和二級指標的結合:

int a =10;

//經典的一級指標指向變數,二級指標指向一級指標;

int* p =

&a;int

** q =

&p;

將 int** q = &p; 變成const int** q = &p;這個型別轉換到底正確與否?也就是const int ** <=int **是否能正確轉換?

由圖可以知道const與二級指標結合有三種情況:

1.

const

int*

*q;2.

int*

const

*q;3.

int*

*const q;

int ** <= const int ** 錯誤

const int ** <= int ** 錯誤

int ** <= int* const * 錯誤

int* const * <= int ** 正確

const與一級指標二級指標結合

const關鍵字在c和c 裡修飾變數時,是不同的,在c 裡const修飾的量是常量,而在c裡const修飾的量是常變數。關於const在c和c 裡的不同我有時間再整理成另外一篇。一 首先來確定一下到底const修飾的是誰。一句話,型別就近原則。const int p 此時離const最近的型別是in...

一二級指標,指標陣列,陣列指標總結

指標就是變數,用來存放位址的變數。includeint main 指標的型別 變數有不同的型別,指標同樣有不同的型別,在定義指標的時候用 type 的方式來定義指標的,如 char 型別的指標就是為了存放char型別的變數的位址。int 型別就是為了存放int型別的變數位址,等等。char p1 n...

二級指標和野指標

1.關於二級指標 例如 char p 這裡定義了乙個二級指標變數p,p是乙個指標變數,毫無疑問在32位系統下佔4個byte。它與一級指標不同的是,一級指標儲存的是資料的位址,二級指標儲存的是一級指標的位址,布局如下 2.陣列引數 和等效的 指標引數 a.void fun char a 3 4 等效為...