zoukankan      html  css  js  c++  java
  • 常量指针(pointer to constant)和指针常量(constant pointer)

      一个指针可以操作两个实体,一个是指针值(即地址),一个是间访值(即指向的实体)。于是指针的常量性也分为两种:常量指针(pointer to constant)和指针常量(constant pointer)。

      指针常量是相对于指针变量而言的,也就是指针值不能修改的指针。常量指针是指向常量的指针的简称。

      定义指针常量还是常量指针就看const修饰,若const修饰指针本身,则为指针常量,若修饰指针类型(指向的实体的类型),则为常量指针。

      常量指针:const int* ip=&a;     

      指针常量:int* const cp=&b;    或  int const* dp=&b;   

      常量指针常量:const int* const icp=&c;    

      常量指针不能通过该指针改变地址空间的值,但并没有限制地址空间的课改变性。因为一个地址空间可能不止一个指针指向它,所以可以通过其他指向它的指针改变它的值。

      指针常量是相对于指针变量而言,就是这个指针成了常量,不能使这个指针指向其他地址空间,但可以通过该地址改变其地址空间内的值。这样说好像也不太明白,直接看例子:

      #include <iostream>
      using namespace std;
      int main() {
         int a = 18;
         int b = 28;
         int c = 58;
     
         //常量指针
         const int* ap = &a;
         //*ap = 12;      //错误,因为ap是常量指针,不能通过这个指针改变其实体的值。
         cout << *ap << endl;
         a = 19;          //正确,该实体依然可变。
         cout << *ap << endl;
         ap = &c;         //正确,常量指针可以修改指针值。
         cout << *ap << endl;
         
        //指针常量
         int* const bp = &b;
         cout << *bp << endl;
         *bp = 12;        //正确,指针常量可以通过指针改变其实体的值。
         cout << *bp << endl;
         //bp = &a;       //错误,指针常量不能改变指针值。
         
        //常量指针常量
           const int* const cp = &c;
         //*cp = 33;        //错误,常量指针常量不能通过该指针修改其实体的值。
         //cp = &b;         //错误,常量指针常量不能修改其指针值。
         c = 57;          //给实体的可变性没变。
         cout << *cp << endl;
      }
    结果如下:
     

      

  • 相关阅读:
    Java高并发24-使用自定义锁生成一个消费模型
    Java高并发连载23-基于AQS实现自定义同步器
    JavaScript连载38-编写评论界面
    Java高并发22-AQS条件变量的支持
    Java高并发21-AQS在共享,独占场景下的源码介绍
    SSH 集成Shiro和EhCache,设置登录超时时间无效解决办法。
    Vue3.0 + Echarts 实现地区人口数量分布展示
    从零开始学VUE之网络模块(Axios)
    从零开始学VUE之VueX(modules)
    从零开始学VUE之VueX(actions)
  • 原文地址:https://www.cnblogs.com/SupremeBoy/p/10255312.html
Copyright © 2011-2022 走看看