目錄
- 1 前言
- 2 變量與指針的儲存方式
- 3 const int *var;int *const var;const int *const var;理解與區分
- 4 總結
1 前言
實際開發過程中經常遇到const關鍵字作用于指針的情況,例如:const int *var;int *const var;const int *const var;總是難以區分指針的哪個部分為Const,本文在于記錄解析const與指針的糾葛。
2 變量與指針的儲存方式
定義一個int類型變量:int Var_1 = 1u;
經過編譯后最終將會在儲存器中開辟一段大小為32 bit的內存用于存放標識符和值:
定義一個int類型指針:int *p = &var_1;
基于上述理解:
a則是通過標識符取值1
&a則為取a的地址為0xA000B000
*p則等同于取地址0xA000B000中的值即為1
&p則取到的是0xC000D000
3 const int *var;int *const var;const int *const var;理解與區分
- const int *p:p為const int 類型,當使用p= N;是禁止的;
- int *const p:const p為 int *類型,當使用p = &N;是禁止的;
- const int *const var:const p 為 const int 類型,使用p= N;p = &N;操作都是禁止的的;
值得注意的是Const關鍵字修飾指針時并不會對指針所指向的目標造成限定,也就是說當*p = N;禁止時,N = 2;這樣的操作仍然是被允許的,不屬于修改了指針的內容,因此這樣的語法常被應用于工程以防止指針的異常修改。
4 總結
以上為個人理解以及方法論,如有原理上的不當之處,望指正。