• C++中的const和指针组合


    众所周知,指针是C++中的一个难点,同时也是一个重点内容,如果我们能够用好指针,那无疑对我们进行程序开发有着很大的帮助,但很多人都用不好指针,甚至在一些经典的教材中,对于指针的叙述也有错误。笔者在阅读谭浩强老先生的《C++程序设计》时发现对于 const 和 指针的组合,书中写的有问题,这里给出经过验证(使用vs2015)得到的正确答案。

    在C++里,const修饰指针有以下三种情况。

    1、指针常量

    const  int *p或者int const *p,这里 p 是指向常量的指针。

    const在*前,,可以这样理解它的功能,因为const在*前,所以p指向的这个int变量对于*p来说是const的,即不能通过*p改变这个变量的值,但是变量本身可以随便改变自己的值。另外也可以改变p的指向。

    例:

    int x=2;

    int y=3;

    const int *p=&x;

    *p=4;   //错误,不能通过*p改变变量的值

    x=4;    //可以,x不是一个常量,可以改变自己的值

    p=&y;   //可以,指针p本身不是一个常量,可以改变p的指向。

    2、常量指针

    int * const p,const在*的后面,也就是说指针p本身是个常量,不能改变p的指向。但是可以通过*p改变所指向变量的值。

    例:

    int x=2;

    int y=3;

    int * const p=&x;     //注:因为指针p是常量,在声明时就应该初始化。

    *p=4;   //可以

    x=4;    //可以,x不是一个常量,可以改变自己的值

    p=&y;   //错误,指针q本身是一个常量,不能改变它的指向。

    3、指向常量的常量指针

    这是前两种的结合,功能也是前两者的结合,即不能改变p的指向,也不能通过*p改变所指向的变量的值。

    const int * const p或者int const * const p

    例:

    int x=2;

    int y=3;

    const int * const p=&x;

    *p=4;   //不可以,不能通过*p改变所指变量的指。

    x=4;    //可以,x不是一个常量,可以改变自己的值

    p=&y;   //错误,指针p本身是一个常量,不能改变它的指向。

    总结:从上面可以看出,不论那种情况,变量本身都是可以改变自己的值的,除非变量本身就是声明成常量(const int x=2;)。区别三种情况关键就是看const在类型前还是在指针前,在类型前,不能通过*p改变变量的值,在指针前不能改变指针的指向,且在声明时就要初始化。

    作者:耑新新,发布于  博客园

    转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com

  • 相关阅读:
    mysql binlog日志
    安装源码包(这里主要写了redis,其他都一样的操作)
    hashMap异常:java.util.ConcurrentModificationException
    谷歌post url “net::ERR_INCOMPLETE_CHUNKED_ENCODING”
    itextpdf结合jfinal模版生成pdf文件
    springboot项目jar冲突问题解决
    map遍历
    el和jstl表达式问题==0的问题
    fastJSON 解析转换包含下划线属性的问题
    CentOS 7 64位
  • 原文地址:https://www.cnblogs.com/Arthurian/p/5746485.html
Copyright © 2020-2023  润新知