///////////////////////const 指针的三种状态/////////////////////

注意:const 的前后顺序
const 在类型之前 ---可以修改指针包含的地址,不能修改指针指向的值
const 在变量之前类型之后 ---可以修改指针的指向值,不能修改指针地址

// 1.指针指向的数据为常量,不能修改,但是可以修改指针包含的地址

/*
int HoursInDay = 24;
const int* pInteger = &HoursInDay;

cout<<HoursInDay<<" "<<*pInteger<<endl;

//*pInteger = 55; //不能通过指针修改指向的值

cout<<HoursInDay<<" "<<*pInteger<<endl;

int MonthsInYear = 12;
pInteger = &MonthsInYear; //可以修改指针指向的地址

//*pInteger = 13;

//int *pAnotherPointerToInt = pInteger; //指针的类型不同不能用于拷贝

*/

//2.指针包含的地址是常量,不能修改,但可以修改指针指向的数据

/*
int DaysInMonth = 30;
int* const pDaysInMonth = &DaysInMonth;

*pDaysInMonth = 31; //Ok! value can be change

int DaysInLunarMonth = 28;
//pDaysInMonth = &DaysInLunarMonth; Cannot change address!
*/

//3.指针包含的地址以及它指向值都是常量,不能修改(这种组合最为严格)

/*
int HoursInDay = 24;

const int* const pHoursInDay = &HoursInDay;

//*pHoursInDay = 25; cannot change pointed value 不能修改指向的值

int DayInMonth = 30;

//pHoursInDay = &DayInMonth; cannot change pointer value 不能修改指针
*/

将指针传递给函数时,这些形式的const很有用。函数参数应声明为最严格的const指针,以确保函数不会修改指针指向的值。这让函数更容易维护,在时过境迁和人员更换尤其如此。

void CalcArea(const double* const pPi,        //const pointer to const data
                    const double* const pRadius, //i.e.. nothing can be changed
                    double* const pArea              //change pointed value,not address
                   )
{
       //check pointers before using!
       if (pPi && pRadius &&pArea)
      {
          *pArea = (*pPi) * (*pRadius) *(*pRadius);
      }
}

int main()
{
const double PI = 3.14;

cout << "Enter radius of circle: ";
double Radius = 0;
cin >> Radius;

double Area = 0;
CalcArea(&PI,&Radius,&Area);

cout << "Area is = "<<Area<<endl;
}

const 指针的三种使用方式的更多相关文章

  1. C++的三种继承方式简述

    C++对父类(也称基类)的继承有三种方式,分别为:public继承.protected继承.private继承.三种继承方式的不同在于继承之后子类的成员函数的"可继承性质". 在说 ...

  2. C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间

    1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ...

  3. socket通信的三种实现方式

    三种 socket 的实现方式 nodejs 下的 socket 服务端代码 const net = require('net') const server = net.createServer() ...

  4. 基于Java的二叉树的三种遍历方式的递归与非递归实现

    二叉树的遍历方式包括前序遍历.中序遍历和后序遍历,其实现方式包括递归实现和非递归实现. 前序遍历:根节点 | 左子树 | 右子树 中序遍历:左子树 | 根节点 | 右子树 后序遍历:左子树 | 右子树 ...

  5. 通过三个DEMO学会SignalR的三种实现方式

    一.理解SignalR ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息 ...

  6. Hive metastore三种配置方式

    http://blog.csdn.net/reesun/article/details/8556078 Hive的meta数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储.远端存储比较适 ...

  7. django 模板语法和三种返回方式

    模板 for循环 {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} if语句 ...

  8. js的三种继承方式及其优缺点

    [转] 第一种,prototype的方式: //父类 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = ' ...

  9. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

随机推荐

  1. 性能测试-ORACLE性能监控

    通过lr做性能测试的过程,通过监控Oracle数据库的性能 采用的监控工具:PeOny PeOny安装 1. 安装服务端 1) LINUX平台安装 解压缩peony3.x.0.x.tar.gz文件,b ...

  2. 临时变量不能作为非const类型引用形参的实参

    摘要:     非const 引用形参只能与完全同类型的非const对象关联.      具体含义为:(1)不能用const类型的对象传递给非const引用形参:                  ( ...

  3. SpringHttpInvoker解析3-客户端实现

    主要的配置文件 <bean id="httpInvokerUserService" class="org.springframework.remoting.http ...

  4. a标签 打电话 发邮件

    打电话<a href=”tel:010-13220163333″>13220163333</a> 发邮件<a href=”mailto:sb@you.com”>发送 ...

  5. SU susort命令学习

  6. psql-01基本介绍

    安装与启动 安装: apt-get install postgresql / yum install postgresql.XXX; 启动: mac下直接打开 linux service postgr ...

  7. http://m.blog.csdn.net/article/details?id=8237698

    http://m.blog.csdn.net/article/details?id=8237698

  8. 不同java 版本的新功能

    Java 5 泛型 自动装箱/拆箱 增强的for 类型安全的枚举 可变参数 静态导入 Annotation Concurrent Package Java 6 Web Service 支持Annota ...

  9. 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器

    Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...

  10. jQuery Dialog and timepicker显示层的问题

    timepicker官网http://timepicker.co/demos/ 当在dialogue上面调用时间选择时,时间选择的框框被dialogue窗口挡住了. 搜出来的方法说修改css,根本改不 ...