指標常量和常量指標

2021-07-04 23:14:32 字數 1136 閱讀 1317

參考這篇文章。

主要是關於常量指標方面進一步理解。

#include using namespace std;

int main()

{ int a = 1;

int b = 2;

int c = 3;

int const *p1 = &b; //常量指標

int *const p2 = &c; //指標常量

cout<

下面使用兩種方法改變p1:

可以看到指標p1這個變數的記憶體位址是0012ff70,原始指向的位址是0012ff78,就是變數b的位址,*p1的值也是變數b的值,

在使用p1=&a將a的位址給指標p1後,p1的記憶體位址是0012ff70,現指向位址是0012ff7c,可以看到已經變成了變數a的位址,*p1的值也隨之變成了a的值。

2。直接改變變數b的值,編譯結果:

指標p1的記憶體位址是0012ff70,原始指向的位址是0012ff78,就是變數b的位址,*p1的值也是變數b的值,

在使用b=22給b重新賦值後,p1的記憶體位址是0012ff70,現指向位址是0012ff78,仍然是變數b的位址,但是由於b的值已改變,所以現在*p1就是現在的結果22。

如果使用*p1=a進行給p1賦值時,編譯會報錯。

綜上,可以理解當p1這個常量指標指向變數b後,無法通過給*p1賦值去改變變數b的值(也就是只能通過指標去讀取這個變數,而無法通過指標去改寫變數,常量指標指向的記憶體唯讀不可寫),而只能通過b主動改變自己的值,才能改變*p1。但是常量指標這個變數(指標也是變數,只不過這個變數存放的是位址)本身自己就是可以改變的,當改變常量指標變數的值後,實際是將這個常量指標指向了另外的乙個變數。

指標常量就好理解了,當它在初始化後,指標的指向的位址就固定了,而指向的位址裡面的內容是可以隨意改變的。

常量指標不能使用間接引用*p1做為左值,但指標常量可以;

常量指標變數p1可以作為左值,但指標常量變數p2不能;

指標 常量指標和指標常量

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

常量指標 和 指標常量

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

常量指標和指標常量

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