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

  

常量指针(pointer to constant)和指针常量(constant pointer)的更多相关文章

  1. 有关指针和C语言中的常量

    常量类型(五种): 字面常量(2,3,6....) ;                           enum 定义的枚举常量; 字符常量('a','b'....) ;              ...

  2. [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表

    A linked list is given such that each node contains an additional random pointer which could point t ...

  3. [LeetCode] 138. Copy List with Random Pointer 拷贝带有随机指针的链表

    A linked list is given such that each node contains an additional random pointer which could point t ...

  4. 力扣——Copy List with Random Pointer(复制带随机指针的链表) python实现

    题目描述: 中文: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深拷贝. 示例: 输入:{"$id":" ...

  5. 指针函数(Pointer Function)和函数指针(Pointer to Function或Function Pointer)

    一.指针函数 1.解释:指针函数很好理解:简单来说,就是一个返回指针的函数,本质是一个函数.如: int fun(int x,int y);    //这是一个普通函数的声明,返回值是一个int类型, ...

  6. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  7. c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

    1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...

  8. [ 随手记 2 ] C/C++ 数组/指针/传数组到函数/指针数组/数组指针

    1.=================================================================== 1,数组是一块内存连续的数据.2,指针是一个指向内存空间的变 ...

  9. [C++]指针和指向数组的指针[一维数组与指针]

     1.一维数组与指针      形如:int型 数组 a[10]                1)&a[0]  地址常量;地址类型:int *型   ; 存储数组a的首地址          ...

随机推荐

  1. jQuery得到多个值只能用取Class ,不能用取ID

    如果页面有多个checkbox: <input type="checkbox"   class="checkApply"    id="chec ...

  2. Vijos P1782 借教室 ( 前缀和&&差分序列)

    题目链接:借教室 题意:给出n天得教室数目,m个借教室得单子,按顺序借教室,问哪个单子不满足并输出 分析:可以用线段树做,会T,常数比较大,选择用差分序列维护前缀和,二分答案即可 #include&l ...

  3. bzoj 2005: [Noi2010]能量采集【莫比乌斯反演】

    注意到k=gcd(x,y)-1,所以答案是 \[ 2*(\sum_{i=1}^{n}\sum_{i=1}^{m}gcd(i,j))-n*m \] 去掉前面的乘和后面的减,用莫比乌斯反演来推,设n< ...

  4. git上拉取tag,识别最新tag在此版本上新增tag

    通过shell 脚本自动获取最新tag,并输入最新版本后,推到git上 # 拉取分支上现有的tags git fetch --tags echo -e "所有tag列表" git ...

  5. java启动参数二

    非标准参数又称为扩展参数,其列表如下: -Xint 设置jvm以解释模式运行,所有的字节码将被直接执行,而不会编译成本地码. -Xbatch 关闭后台代码编译,强制在前台编译,编译完成之后才能进行代码 ...

  6. (五)Python面向对象编程

    根据廖雪峰老师的python教程写一些学习总结! 面向对象编程 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元, ...

  7. Rsync 12种故障排查及思路

    Rsync 故障排查整理 Rsync服务常见问题汇总讲解: ====================================================================== ...

  8. SPFarm.local返回值为null

    创建了一个控制台应用程序,想输出SP2010服务器场下所有对象模型信息,结果:SPFarm.local返回值为null. 经查询解决方法: 1 .net framework版本要使用3.5: 2 目标 ...

  9. WPF学习08:MVVM 预备知识之COMMAND

    WPF内建的COMMAND是GOF 提出的23种设计模式中,命令模式的实现. 本文是WPF学习07:MVVM 预备知识之数据绑定的后续,将说明实现COMMAND的三个重点:ICommand  Comm ...

  10. Java BigDecimal类的使用和注意事项

    1.对于金额相关运算,若是精度较高,基本上用BigDecimal进行运算,精度要求低的话用Long.Double即可 2.web后台接受金额用String接受,展示到前端一般也转成 String 3. ...