• 关于const 和指针


    这个很久之前就很困扰的问题,现在再理一下:

    1,指向const对象的指针

    》C++强制要求指向const对象的指针也必须具有const特性!!!也就是不能把一个const对象的地址赋给一个非const对象的指针!

    》而该指针的const特性限定了该指针所指向的对象的类型,而并非该指针本身。

    eg. const int i = 0;

         const int *p = &i;    //OK

         int *p = &i;           //error

    》不能用void *指针保存const对象的地址,而必须用const void *类型的指针保存const对象的地址

    》允许把非const对象的地址赋给指向const对象的指针,并不能通过该指针改变其值(但是可以通过其他方式改变)

    2,const指针

    》其本身的值不能修改!即初始化后就不能指向其他的地址!!

    》与任何const量一样,在定义const指针时必须进行初始化!但是指向const对象的指针不必

    eg. int i = 0;

         int *const P = &i;    //不能指向const int类型的对象!

    3,指向const对象的const指针

    》既不能修改初始化后的指针指向的地址,也不能修改指向对象的值!(必须在定义的时候初始化)

    eg. const int i = 0;             //所指向的对象必须是const类型,而不能是非const

         const int *const p = &i;

    4,指针和typedef

    》typedef中使用指针就不能单纯的当做文本扩展

    eg. typedef string *ps;

         const ps cstr;

    可等价于

         string *const cstr;

    并且和

         ps const cstr;

    也是等价的,都可指向string类型的对象。

          

  • 相关阅读:
    201141 live the lie until the lie becomes your life
    my php & mysql FAQ
    suger日料财务
    python 应用thrift thrift的监控fb303
    cherryPy学习
    my linux FAQ
    Javascript无阻塞加载方法
    设计模式学习笔记之组合模式模式
    【转】cookie
    C# 多线程
  • 原文地址:https://www.cnblogs.com/day-dayup/p/3575198.html
Copyright © 2020-2023  润新知