指针和Const限定符

1.指向const对象的指针

  如果指针指向的是const对象,则不允许使用指针来改变其所指的const值。C++要求指向const对象的指针具有const特性

const double *cptr;                 //cptr是一个指向double类型const对象的指针。

此处const限定了cptr指针所指向的对象类型,而非cptr本身。即cptr本身并不是const。在定义时,不需要对它进行初始化,若需要,可使cptr指向另一个const对象,但不允许使用cptr来改变所指向对象的值

*cptr = 30; //error

  1)把一个const对象的地址赋给const对象的指针会导致编译时错误:

const double Pi=3.14;
double *ptr = Π             //error
const double *cptr = Π      //ok

  2)不能使用void*指针保存const对象的地址,必须使用const void*类型的指针保存const对象的地址:

const int universe = 42;
const void *cpv = &universe;      //ok
void *pv = &universe;             //error

  3)允许把const对象的地址赋值给指向const对象的指针

double dval = 3;
cptr = &dval;

  虽然dval不是const对象,但任何企图通过指针cptr修改其值的行为均会导致编译错误。指向const对象的指针一经定义,就不允许修改其所指对象(const对象和非const对象)的值。若指向const对象的指针所指的对象是非const对象,可以使用其他方法更改其值:

dval = 3.1415926;
*cptr = 3.1415926;        //error
cptr = &dval;
double *ptr = &dval;
*ptr = 2.72;
cout << *cptr;        //输出2.72

  故:不能保证指向const对象的指针所指对象的值一定不可以修改。

  在实际的应用中,指向const对象的指针常用作函数的形参,以确保传递给函数的实际对象在函数中不因形参的改变而被修改。

2.const指针

  const指针:是指该指针不可改变。

int errNumb = 0;
int *const curErr = &errNumb;

  可从右向左将上述定义读作“curErr是指向int型对象的const指针”。这意味着不能使curErr指向其他对象,任何试图给curErr赋值的操作均会导致编译错误。

curErr = curErr;    //error

  与任何const量一样,const指针必须在定义时初始化。

  指针本身是const的事实并没有说明是否能使用该指针修改它所指对象的值。指针所指对象的值能否修改完全取决于该对象的类型。即该指针是const并不代表就不能修改其所指对象的值。如果const指针指向const对象,那么就可以使用该指针修改所指对象的值:

int e=9;
int *const p=&e;
*p=6;

这样,e的值被修改为6。

3.指向const对象的const指针

  还有一种指向const对象的const指针

const double pi = 3.1415926;
const double *const pi_ptr = &pi;

  上例中,即不能修改pi_ptr所指对象的值,也不允许修改指针的指向(即pi_ptr中存放的地址值)。可从右向左将上述定义读作“pi_ptr首先是一个const指针,指向double类型的const对象”。

转载于:https://www.cnblogs.com/whl2012/p/3614730.html

指针和Const限定符相关推荐

  1. 指针、引用以及const限定符、constexpr限定符

    文章目录 复合类型 引用 概念与使用 引用的定义 注意 指针 概念 声明方式 取地址符 指针值 空指针 利用指针访问对象 赋值和指针 void* 指针 指向指针的指针 指向指针的引用 初始化所有指针 ...

  2. php+条件限定符,const 限定符

    const 限定符 const 对象一旦创建后不可改变,所以const必须初始化. const int i=get_size(); //运行时初始化 const int j=43; const int ...

  3. C++的const限定符

    const限定符总是让人很头疼,下面讲解一下几个比较容易混淆的概念: 对常量的引用(常量引用): 一般情况下,引用的类型要与其所引用的对象的类型一致,其中的例外情况就是,当初始化常量引用时,允许用任意 ...

  4. C++primer第二章2.4节对于const限定符相关内容进行详解

    const限定符 const对象一旦创建后其数值就不会被再次改变,因此const对象必须初始化. const对象只在文件中有效 在不同的文件中使用不同的const来定义不同的常量,那么每个文件定义的变 ...

  5. C++ const限定符和auto类型说明符

    const限定符 # 1.限定常量 有时我们希望定义这样的变量:它的值不能被改变.为了满足这一要求,我们使用const对变量的类型加以限定: const int bufSize = 512; 这样就把 ...

  6. c++ const限定符

    const限定符 const对像一旦创建,其值就不能发生改变.const对象必须初始化 const int i = get_size();//正确,运行时初始化. const int j = 1;// ...

  7. 指针和const限定

     [1]指向const对象的const指针     可以定义指向const对象的const指针,形式为:      const 指向类型 * const 指针变量名:     例如     con ...

  8. Const限定符与C++11Constexpr的区别

    Const限定符: 属于标准C里的限定符,负责将变量.对象转换成一个字面值常量,值得注意的是,Const限定符只能在编译期间被确定为字面值常量,但是在运行阶段还是会为其分配内存而不是存在于代码段中,也 ...

  9. 【C++学习笔记】复合类型和const限定符

    一.复合类型   复合类型(compound type)是指基于其他类型定义的类型.本次主要介绍引用和指针两种. 1.1 引用   引用(reference)为对象起了另外一个名字,引用类型引用(re ...

最新文章

  1. 蓝桥杯-5-1最小公倍数(java)
  2. C#中Finalize方法的问题
  3. CDH 版本Hadoop Yarn配置容量调度器(默认是公平调度器)
  4. gitlab mysql 配置_gitlab的安装与修改端口配置
  5. python接口自动化接口依赖_Python接口自动化之mock模块简单使用
  6. python 使用文本注解绘制树节点_实用篇 | 34 个最火的 Python 开源框架
  7. java unsigined short_LDD之数据类型
  8. php调用window系统自带的命令,比如计算器
  9. java框架之SpringBoot(5)-SpringMVC的自动配置
  10. 11g R2 RAC客户端负载均衡配置
  11. Linux中级之lvs三个模式的图像补充(nat,dr,tun)
  12. Java基础——从数组到集合之间关键字的区别!!!!
  13. macbook查看java版本,Mac下查看JDK版本和安装目录
  14. 蓝色的网站商城后台通用管理模板——后台
  15. 禁用win10触摸屏手势_怎样禁用、启用Win10平板边缘滑动手势
  16. 3种重新启动或强制关闭任何Mac死机的方法
  17. python设置端口控制ie浏览器_[Python爬虫] 之二:Selenium 调用IEDriverServer打开IE浏览器安装配置...
  18. 亮剑java web_为什么《亮剑Java Web 项目开发案例导航》第二个项目运行不了?
  19. 排列显示阿拉伯语、数字及英文时的处理方法
  20. 用unity实现大转盘

热门文章

  1. FPGA 实验六 计数器、 ROM和DDS
  2. java 无法找到ant_无法找到与ANT(mac)关联的文件
  3. lisp改图元字体式样_一个更改尺寸类型的LISP程序
  4. 047_Divider分割线
  5. php 可以做pc客户端吗,vue.js能做pc端吗
  6. 深交所互动平台_怡达股份股价涨跌幅偏离大盘,深交所:啥原因?
  7. 平面设计要掌握的实用技巧
  8. matlab怎么实现循环,matlab怎么实现直到型循环
  9. python中模块和函数_Python中函数和模块的体验与使用
  10. 计算机上能玩vr游戏吗,VR设备是什么? 听说可以用来玩电脑游戏的?