///////////////////////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. loadrunner选择执行哪个Action

    深圳湖北籍软件测试群 275212937

  2. DuckHunter Attacks

    DuckHunter Attacks   DuckHunter Attacks是从USB Rubber Ducky (USB橡皮鸭)发展过来的HID攻击方式.USB Rubber Ducky是从201 ...

  3. 分享Kali Linux 2016.2第45周镜像

    分享Kali Linux 2016.2第45周镜像Kali Linux官方于11月6日发布Kali Linux 2016.2的第45周的镜像.此次镜像维持了以往11个镜像文件的规模,包括32位.64位 ...

  4. TestNg依赖配置基础用法(单一方法依赖)------TestNg依赖详解(一)

    TestNg依赖测试之简单方法依赖,通过dependsOnMethods属性来配置依赖方法 原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong J ...

  5. Block与代理的使用

    本人其实是比较喜欢用Block的,因为用block写出来的代码,让我感觉代码要紧凑一些,看起来的时候,思路要清晰些,所以这估计也就是现在block将要代替代理的原因所在吧! 下面,直接进入主题: 一. ...

  6. EF框架step by step(3)—Code-First

    CodeFirst是EF框架的第三种方式,也是最为复杂一种方式,本文将以EF4.1版本为基础,简要讲解一下用法,同时,也介绍DbContext的用法. 本文采用的示例仍然是前两篇采用的博客用户的示例. ...

  7. Python安装pandas

    http://blog.sina.com.cn/s/blog_a73687bc0101eenc.html 安装vcforpython: http://www.microsoft.com/en-us/d ...

  8. Android系统中的6种模式

    Android系统中的6种模式 1:一般启动模式(normal mode):    功能是正常启动手机,方法为关机状态下按电源键启动. 2:安全模式(safe mode):    此模式和正常启动一样 ...

  9. unity 解析xml

    using UnityEngine; using System.Collections; using System.IO; using System.Xml; public class xml : M ...

  10. Hadoop建立IPC连接和数据读写

    建立IPC连接 IPC Client通过调用getConnection获取IPC连接,具体流程图如下: 服务器端的IPC连接代码分散在Listener和Server.Connection中. List ...