const修飾指針是我們學習c++ 的過程中必須要經歷的事情,總是把我們整的暈頭轉向,可能也是我自身能力不行,大佬應該沒有這種感覺,言歸正傳,開始解剖指針。
一.const修飾指針--常量指針
例:int a = 10;
int b = 20;
const int * p = &a; //常量指針
特點:指針的指向可以修改,但是指針指向的值不可以修改,稍微解釋一下,const後面接的是* 說明*p是不能修改的,*p是不是我們所說的指針指向的值,但是p沒有被const修飾,是可以修改的,p是不是我們說的指針的地址,這個是可以改變的,可以指針別的地址。
比如:*p = b.; //錯誤,指針指向的值不可以修改
p = &b; //正確,指針的指向可以修改,相當於可以指向別的地址。
這時就有人要問了,不是說指針指向的值不能修改嗎,那通過修改指針的地址,指針的值一樣被修改了,這裏要注意的一點是,我們不能直接去修改指針的值,相當於不能直接給指針賦值,這樣應好理解了吧。比如 *p = 30; 這樣是錯的,常量指針不能直接修改指向的值。
二.const修飾指針--指針常量
例:int a = 10;
int b = 20;
int * const p= &a; //指針常量
特點:指針的指向是不可以修改,但是指針指向的值可以修改,稍微解釋一下,const後面接的是p 說明p是不能修改的,p是不是我們所說的指針的指向,p是不是我們說的指針的地址,這個是不可以改變的,但是*沒有被const修飾,*p是可以修改的,。
比如:*p = b.; //正確,指針指向的值可以修改
p = &b; //錯誤,指針的指向不可以修改,相當於不可以指向別的地址。
我們可以去直接修改指針指向的值,但是不能改變指針的指向,相當於指針的地址是不能修改的,比如 p = &b; 這就是錯的
三.const即修飾指針又修飾常量
例:int a = 10;
int b = 20;
const int * const p= &a; //指針常量
特點:指針的指向是不可以修改,但是指針指向的值不可以修改,稍微解釋一下,const後面接的是p 說明p是不能修改的,p是不是我們所說的指針的指向,p是不是我們說的指針的地址,這個是不可以改變的,但是*也被const修飾,*p也是不可以修改的,。
比如:*p = b.; //錯誤,指針指向的值不可以修改
p = &b; //錯誤,指針的指向不可以修改,相當於不可以指向別的地址。
程序如下
1 #include<iostream> 2 3 using namespace std; 4 5 int main(int argc, char **argv) 6 { 7 int a = 10; 8 int b = 20; 9 10 //指針修飾常量 常量指針 11 const int * p1 = &a; 12 p1 = &b; 13 cout << *p1 << endl; 14 15 //指針修飾常量 指針常量 16 int * const p2 = &a; 17 *p2 = b; 18 cout << *p2 << endl; 19 20 //const即修飾指針,又修飾常量 21 const int * const p3 = &a; 22 cout << *p3 << endl; 23 return 0; 24 } ~ ~