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 } ~ ~