c++中的const修饰指针

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章