一个指针可以操作两个实体,一个是指针值(即地址),一个是间访值(即指向的实体)。于是指针的常量性也分为两种:常量指针(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;
  }
结果如下:
 

  

最新文章

  1. python基础02 基本数据类型
  2. Meteor常用技能
  3. 《PHP开发APP接口》笔记
  4. 设计模式之Iterator模式(2)
  5. 开始开发HoloLens应用吧 Start Developing HoloLens Apps Today
  6. [jobdu]孩子们的游戏(圆圈中最后剩下的数)
  7. (转)iOS被开发者遗忘在角落的NSException-其实它很强大
  8. 出现并解决Navicat 报错:1130-host ... is not allowed to connect to this MySql server,MySQL
  9. 重启OpenStack服务步骤
  10. matlab获取文件夹中的所有文件名(dir)
  11. 自定义实现moveable button
  12. web请求流程
  13. assembly.xml
  14. volatile的内存语义
  15. [转] $.ajax中contentType: “application/json” 的用法
  16. MFC AfxMessageBox MessageBox MessageBoxA 默认标题修改
  17. JavaScript-模拟收银台小程序
  18. seaweedFS
  19. 将 DNSCrypt 部署到 Openwrt 路由器上+ DNSmasq 解析国内域名用本地 DNS[ZT+实践]
  20. [HDOJ]Coin Change(DP)

热门文章

  1. DevStack部署OpenStack开发环境 - 问题总结
  2. 有了Git这些操作,我再也不怕开发了!
  3. 【洛谷2304_LOJ2134】[NOI2015]小园丁与老司机(动态规划_网络流)
  4. 模拟 hihoCoder 1177 顺子
  5. Android 内存溢出处理方案
  6. MyEclipse开启Jquery智能提示
  7. bootstrap datatable项目封装
  8. math数学函数
  9. Java 线程实例 刷碗烧水和倒计时
  10. P1118 [USACO06FEB]数字三角形Backward Digit Su…