• 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 }
    ~                                                                                         
    ~                      
  • 相关阅读:
    安全测试 + 渗透测试 Xmind 要点梳理
    Confluence wiki——CentOS6.8搭建详解
    Flask从入门到做出一个博客的大型教程(一)
    基于Cat的分布式调用追踪
    Elastic-job使用及原理
    Jmeter模拟不同带宽
    Mybatis中parameterType、resultMap、statementType等等配置详解(标签中基本配置详解)
    SQLyog Enterprise常用快捷键
    MyBatis 与 Spring Data JPA 选择谁?
    Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/14320182.html
Copyright © 2020-2023  润新知