C 複習之const與指標的結合應用

2021-10-05 16:15:29 字數 1278 閱讀 8021

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...