const修飾的量常出現的錯誤是:
(1)常量不能再作為左值(直接修改常量的值)
(2)不能把乙個常量的位址洩露給乙個普通的指標或者普通的引用變數(間接修改常量的值)
1.const和一級指標的結合
c++語法規範裡有這麼一句話:const修飾的是離他最近的型別
常見的const修飾主要有一下幾種情況:
(1) const int *p;
*p不能被改變,也就是指標的指向不能被改變。指標可以指向任意的int型別的記憶體,但是不能通過指標間接修改指向的記憶體的值。
(2)int const * p;
與第一種情況一樣,const都是修飾的是整型 *p。
(3)int *const p;
這個時候離const最近的型別是int *,這個時候const修飾的就是p這個指標本身,這個指標p現在是常量,不能再指向其他記憶體,但是可以通過指標解引用修改指向的記憶體的值。
(4)const int **const p;
既不能通過指標間接修改指向的記憶體的值,也不能通過指標解引用修改指向的記憶體的值。
const和指標的型別轉換公式
可以把乙個int * 的位址給乙個const int * ,因為普通變數沒有約束。
不能把乙個const int * 的位址給乙個int * ,因為這樣可以通過普通指標的解引用來修改const int *所指向的值。
下面是乙個錯誤例:
int main()
如果const右邊沒有指標*的話,const是不參與型別的。例如:
int *p1 = nullptr;
int *
const p2 = nullptr;
其中,p1與p2的型別都是int *.
2.const和二級指標的結合
最基本的有三種形式:
(1)const int **q;
const 修飾int,**q的值不能被改變。
(2)int * const * q;
const修飾int *,*q的值不能被改變。屬於與一級指標結合的情況。
(3)int **const q;
const 修飾int **,q的值不能被改變。
const與多級指標結合的時候,兩邊都必須有const。一邊有一邊沒有是絕對不行的。
int main()
為了好好掌握,還是得多做題,多在實踐中使用! C語言中關於const與指標結合的理解
這裡的const要保護的就是資料不能被修改!單獨使用的話,可能就像 define一樣,但是如果是函式引數呢?指標形式的 比如我要把乙個列表裡的內容顯示出來,可能會定義這麼個函式 typedef struct list data void listshow data const data 這個時候我就...
複習 C 之const成員
const int num 0 常量必須要初始化,而且不可修改。int num 100 const int p 在這兩句 後,p可以修改,p不可以修改。int num 100 int const p 在這兩句 後,p可以修改,p不可以修改。所以變數能不能修改看的是宣告時const後面的是什麼。con...
C指標之const關鍵字與指標
第一種 const int p1 p本身不是cosnt的,而p指向的變數是const的 第二種 int const p2 p本身不是cosnt的,而p指向的變數是const的 第三種 int const p3 p本身是cosnt的,p指向的變數不是const的 第四種 const int const...