常量指標和指標常量

2021-07-11 01:44:17 字數 1565 閱讀 4103

標籤: 編譯器

funvimc

2012-03-30 00:33

11584人閱讀收藏 

舉報

c++學習

在c/c++中關鍵字const用來定義乙個唯讀的變數或者物件,有如下優點

(1)便於型別檢查,如函式的函式 fun(const int a) a的值不允許變,這樣便於保護實參。

(2)功能類似與巨集定義,方便引數的修改和調整。如 const int max = 100;

(3)節省空間,如果再定義a = max,b=max。。。就不用在為max分配空間了,而用巨集定義的話就一直進行巨集替換並為變數分配空間

(4)為函式過載提供參考

而c/c++中常把指標和常量混合起來使用,其最大的用途就是作為函式的形式引數,保證實參在被調函式中的不可改變的特性,那到底常量指標和指標常量有什麼區別呢?

下面通過乙個例子來解析 常量指標 和 指標常量,我們先總結一下 常量指標 和 指標常量 的區別

首先一定要明白哪種定義方式是常量指標,哪種是指標常量,這裡可以記住三句話加深記憶:

* (指標)和 const(常量) 誰在前先讀誰 ;

*象徵著位址,const象徵著內容;

誰在前面誰就不允許改變。

好吧,讓我們來看這個例子:

[cpp]view plain

copy

inta =3;  

intb = 1;  

intc = 2;  

intconst

*p1 = &b;

//const 在前,定義為常量指標

int*

const

p2 = &c;

//*在前,定義為指標常量 

常量指標p1:指向的位址可以變,但內容不可以重新賦值,內容的改變只能通過修改位址指向後變換。

p1 = &a是正確的,但 *p1 = a是錯誤的。

指標常量p2:指向的位址不可以重新賦值,但內容可以改變,必須初始化,位址跟隨一生。

p2= &a是錯誤的,而*p2 = a 是正確的。

下面是在vim編輯器中的除錯結果

上述**在注釋 18行 和 24行 **後才能正確輸出,下圖是正確結果

輸出結果可以看出,對於常量指標p1,改變其位址指向,內容也隨著位址的改變而變化了。

而對於指標常量p2,初始化後位址就固定了,內容可以隨時重新賦值。

對於常量指標p1,我們可以改變它指向的位址,但不能改變指向的內容,如果改變了,就會出錯,下面是18行**取消注釋後編譯器提示的錯誤:

對於指標變數p2,我們可以改變他指向的內容,卻不能改變它指向的位址,如果改變了,就會出錯,下面是24行**取消注釋後編譯器提示的錯誤:

經過上面的介紹,我想大家應該知道常量指標和指標常量的區別了。

指標 常量指標和指標常量

const關鍵字宣告乙個常量,常量宣告後不能修改。類似的,我們可以宣告常量指標 double radius 5 double const pvalue radius pvalue 4 可以修改其中pvalue是乙個常量指標,其宣告和初始化必須在同一條語句中,後面的程式不能為其賦予新的位址。注意,雖然...

常量指標 和 指標常量

在c 的學習中,有人經常搞不清楚 常量指標 和 指標常量 這兩個概念。其實簡單一點講,常量指標 所指向的位址上的資料是常量,而 指標常量 所指向的位址是常量,位址上面的資料是可以變化的。常量指標,表述為 是常量的指標 它首先應該是乙個指標。指標常量,表述為 是指標的常量 它首先應該是乙個常量。指標常...

常量指標和指標常量

定義 具有只能夠讀取記憶體中資料,卻不能夠修改記憶體中資料的屬性的指標,稱為指向常量的指標,簡稱常量指標。宣告 const int p int const p 注 可以將乙個常量的位址賦值給乙個對應型別的常量指標,因為常量指標不能夠通過指標修改內粗資料。只能防止通過指標引用修改記憶體中的資料,並不保...