• 常量指针(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;
      }
    结果如下:
     

      

  • 相关阅读:
    关于“云计算”
    实现工作流至少需要几张表?
    BPI (业务流程改进)项目的管理沙龙笔记
    对“设计”工作在流程中的重新定位
    面向。。。驱动
    定个小目标
    Redis源码分析Sentinel(1)Sentinel服务器
    Redis源码分析Sentinel(3)主观下线与客观下线
    Redis源码分析Sentinel(2)实例处理的Monitor half
    Redis源码分析Sentinel(4)实例处理的Acting half
  • 原文地址:https://www.cnblogs.com/SupremeBoy/p/10255312.html
Copyright © 2020-2023  润新知