///////////////////////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. 本人经过测试认为最简单最好的popupwindow样式

    <shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- solid 设置 ...

  2. .net自动生成数据库表的类

    // 获取到所有的用户表.DataTable userTableName = GetTable( "select name as tablename from sysobjects wher ...

  3. jQuery.lazyload详解

    <SCRIPT src="jquery.js" type=text/javascript></SCRIPT> <SCRIPT src="jq ...

  4. HTTP基础06--网络安全

    HTTP 的缺点 通信使用明文可能会被窃听 HTTP 报文使用明文(指未经过加密的报文)方式发送. 通信的加密 用 SSL 建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了.与 SSL ...

  5. 【面经】用递归方法对二叉树进行层次遍历 && 二叉树深度

    void PrintNodeAtLevel(BiTree T,int level) { // 空树或层级不合理 ) return; == level) { cout << T->da ...

  6. 简单的jQuery扩展函数-让函数缓冲执行

    $.fn.retarder = function(delay, method) { var node = this; if (node.length) { if (node[0]._timer_) c ...

  7. daemontools管理fast-fail的zookeeper

    daemontools项目:http://cr.yp.to/daemontools.html 1.安装daemontools mkdir /package /package cd /package w ...

  8. Java web项目在linux环境下自动编译和部署脚本

    自动编译脚本 build.sh, 放置在项目根目录下. #!/bin/bash # check args # init path CURRPATH=`pwd` LIBDIR="$CURRPA ...

  9. 纯CSS打造银色MacBook Air(完整版)

    上一篇:<selection伪元素小解> ::selection{ background:blue; color:red; }p{font-size:14px;} 作者主页:myvin 博 ...

  10. 20145308刘昊阳 《Java程序设计》第7周学习总结

    20145308刘昊阳 <Java程序设计>第7周学习总结 教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GMT) 世界时(UT ...