const 關鍵字與指標

2022-06-04 18:57:10 字數 1797 閱讀 5022

一. 入門:概念引入

定義乙個 int 型別的普通變數 val ,假設它的值是 10。再定義乙個指向該變數的指標 val_ptr ,它儲存了 val 的位址。

1

int val = 10;2

int *val_ptr = &val;

乙個 int 型別的變數儲存的是 int 型別的值,同理,乙個指向 int 型別的指標變數,儲存的是乙個位址,這個位址所指向的記憶體空間,存放著乙個 int 型別的值。

指標型別與其它型別別無二致,裡面都存放著東西,所以指標變數裡面的內容是可以被修改的。我們還可以通過指標,修改它所指向的記憶體空間的東西。

二. 高階:const 與指標

1. 我們在上面定義了乙個普通變數 val,它的值是可以被改變的。要讓這個變數成為乙個常量,則需要加上 const 關鍵字,這樣變數 val 的值就不能被改變了。

1

const

int val = 10;

2. 現在我們用上面的原始 val 變數來說明問題(不帶 const 關鍵字的版本)

1

int val = 10;2

int *val_ptr = 10;

val 是乙個普通變數, val_ptr 也是乙個普通指標。val 變數的值可以被改變,val 的值也可以通過 val_ptr 來改變。

如果不想讓 val_ptr 對變數作出修改,則需要加上 const 關鍵字:

1

const

int *val_ptr = &val;

這使得 val_ptr 指向了乙個 「常量」。但是我們知道, val 並不是乙個常量。這條語句只是規定了,不允許通過 val_ptr 這個途徑來修改 val 的值,但它並不在意 val 到底是不是乙個常量。

3. 假如 val 真的是乙個常量,那麼 指向它的指標應該是這樣:

1

const

int val = 10;2

const

int *val_ptr = &val;

以上語句清楚的表明了, val 的值不能被改變,因此指向它的指標的型別,也需要匹配。

4. 不過既然指標也是變數,它裡面存放的值應該可以被改變。

1

int val_a = 10;2

int *val_ptr = &val_a;

3int val_b = 20

;4 val_ptr = &b;

我們定義了乙個普通變數 val_a 和普通指標 val_ptr ,並令 val_ptr 指向 val_a。之後又定義了乙個普通變數 val_b,並該變了 val_ptr 的指向,使它指向了 val_b。

這樣做並沒有任何不妥,因為沒有人規定 val_ptr 是 val_a 獨有的。(引用不一樣,引用與變數的關係一旦建立,就不會改變)

如果我們需要指定指標與變數的對應關係,就需要向下面這樣:

1

int val = 10;2

int *const val_ptr = &val;

注意 const 的位置,這次它在指標名前,說明指標裡面的內容不能被改變。

如果我們希望更進一步,不允許通過指標這個途徑改變變數值,那麼需要向下面這樣:

1

int val = 10;2

const

int *const val_ptr = &val;

這裡有兩個 const ,第乙個 const 指出,指標不能改變它指向的物件;第二個 const 指出,指標自身不允許被改變。

const關鍵字與指標

1 const修飾指標的四種形式 a.const是關鍵字,在c語言中原來修飾變數,表示這個變數是常量。const int inum 10 和 int const inum 10 的效果是一樣的。b.const修飾指標有4種形式。區分清楚這4種即可全部理解const和指標。1 const int p ...

const關鍵字與指標

const關鍵字與指標 const修飾指標的4種形式 1 const.關鍵字,在c語言中用來修飾變數,表示這個變數是常量。2 const修飾指標有4種形式,區分清楚這4種即可全部理解const和指標。第一種 const int p 第二種 int const p 第三種 int const p 第四...

C 指標與const關鍵字

在c 中,我們經常使用const關鍵字來定義常量,這是const的基礎用法。然而,當const與指標變數結合起來時,情況就會變得稍稍複雜,下面講解const與指標變數結合的三種形式。const關鍵字在指標型別之前定義,我們稱這種情況為常量指標,形式如下 int a 10,b 20 const int...