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;
      }
    结果如下:
     

      

  • 相关阅读:
    python基础练习题(题目 学习使用auto定义变量的用法)
    python基础练习题(题目 模仿静态变量的用法)
    roaring bitmap 与 bitmap 比较. 编译运行
    Linux 实现开关机测试,记录开机次数
    Linux 显示开机欢迎信息(/etc/issue 与 /etc/motd)
    Linux 修改文件权限概述
    把编译好的程序放在Linux系统里,实现不需要配置程序和动态库的环境变量,直接执行
    Linux 提示 is not a symbolic link 错误解决方法
    Ubuntu 自动更新详解【转】
    C#线程入门
  • 原文地址:https://www.cnblogs.com/SupremeBoy/p/10255312.html
Copyright © 2011-2022 走看看