指向对象的常指针

将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变。

Time t1(10,12,15),t2;
Time * const ptr1=&t1;
ptr1=&t2;

定义指向对象的常指针的一般形式为

类名    *    const    指针变量=对象地址;

注意应该在定义指针变量时使之初始化

指向对象的常指针变量的值不能被改变,即始终指向同一个对象,但可以改变其所指向对象中的数据成员(非const型)的值。

往往用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其始终指向原来的对象。如果在函数的执行过程中,修改了该形参的值,编译系统就会出现错误,给出出错信息,这样比用人工来保证形参值不被修改更可靠

指向常对象的指针

如果一个变量已经被声明成常变量,则只能用指向常变量的指针变量指向它,而不能用一般的(非const型的)指针变量指向它。

const int a;//定义常变量a
const int *p;//定义指向常变量的指针
p=&a;

对于对象也是如此,如果声明一个对象为常对象,则只能用指向常对象的指针指向它,而不能用一般的(非const型的)指针变量指向它。

const Time t1;//定义常对象
const Time *p;//定义指向常对象的指针
p=t1;

定义指向常对象的指针变量的格式

const    类名    * 指针名;

有以下几点需要注意:

(1)一个指向常对象的指针是可以指向一个非const型的对象的,但是指向的对象是不能通过指针来改变的。

而一个常对象只能由指向常对象的指针指向,具体看表:

(2)注意指向常对象的指针和指向对象的常指针的差别

Time * const p;//指向对象的常指针
const Time * p;//指向常对象的指针

(3)指向常对象的指针最常用于函数的形参,目的是保护形参指针所指向的对象,使他在函数执行过程中不被修改。

(4)如果定义了一个指向常对象的指针变量,是不能通过它改变所指向的对象的值的,但是指针变量本身的值是可以改变的。

const Time *p=&t1;//定义指向常对象的指针变量p,并指向对象t1
p=&t2;//p改为指向t2,合法

const在*前面,则是指向常变量的指针;const在*后面,则是指向变量的常指针。

C++中指向对象的常指针和指向常对象的指针的更多相关文章

  1. 父类构造函数中的this指针在子类构造对象后,这个this指针指向什么

    子类的对象内存布局包括两部分:父类和子类派生部分,所以执行父类的构造函数只不过是在构造子类对象的父类部分.因此子类对象的this指针是指向子类对象自己.

  2. c++中指针常量,常指针,指向常量的常指针区分

    const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * con ...

  3. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  4. cocos2dx中CC_CALLBACK_1等宏中this指针实际指向

    首先看代码,我在Helloworld中添加两个函数. void HelloWorld::addTarget(){ Size visibleSize = Director::getInstance()- ...

  5. C++中const修饰基本数据类型、指针、引用、对象

    const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const cha ...

  6. C++反汇编第三讲,反汇编中识别虚表指针,以及指向的虚函数地址

    C++反汇编第三讲,反汇编中识别虚表指针,以及指向的虚函数地址 讲解之前,了解下什么是虚函数,什么是虚表指针,了解下语法,(也算复习了) 开发知识为了不码字了,找了一篇介绍比较好的,这里我扣过来了,当 ...

  7. 深入理解JS函数中this指针的指向

    函数在执行时,会在函数体内部自动生成一个this指针.谁直接调用产生这个this指针的函数,this就指向谁. 怎么理解指向呢,我认为指向就是等于.例如直接在js中输入下面的等式: console.l ...

  8. C++反汇编第二讲,反汇编中识别虚表指针,以及指向的虚函数地址

    讲解之前,了解下什么是虚函数,什么是虚表指针,了解下语法,(也算复习了) 开发知识为了不码字了,找了一篇介绍比较好的,这里我扣过来了,当然也可以看原博客链接: http://blog.csdn.net ...

  9. c++中关于值对象与其指针以及const值对象与其指针的问题详细介绍

    话不多说,先附上一段代码与运行截图 //1 const int a = 10; //const 值对象 int *ap = (int *)&a;//将const int*指针强制转化为int* ...

随机推荐

  1. 一张图学习vim常用命令

    一张图学习vim常用命令

  2. MySQL创建用户并授权及撤销用户权限

    这篇文章主要介绍了MySQL创建用户并授权及撤销用户权限.设置与更改用户密码.删除用户等等,需要的朋友可以参考下 MySQL中创建用户与授权的实现方法. 运行环境:widnows xp profess ...

  3. SrpingCloud 之SrpingCloud config分布式配置中心实时刷新

    默认情况下是不能及时获取变更的配置文件信息 Spring Cloud分布式配置中心可以采用手动或者自动刷新 1.手动需要人工调用接口   监控中心 2.消息总线实时通知  springbus 动态刷新 ...

  4. QT 操作数据库SQLite实例

    #include "widget.h" #include <QApplication> #include <QtSql> #include <QTex ...

  5. Hadoop- Hadoop运维小计

    如果是新添加一个节点,需要执行以下步骤: 首先,把新节点的 IP或主机名 加入主节点(master)的 conf/slaves 文件. 然后登录新的从节点,执行以下命令: $ cd Hadoop_pa ...

  6. python的字符串操作函数之一览

    s.strip(chars) s.find(x,start,end) s.index(x.start,end)#见上: s.format()#见上: s.partition(x)#见上: s.repl ...

  7. 第一章 走进Python

    目标 了解Python的历史 了解Python的特征 了解Python的应用 掌握Linux下Python开发环境的搭建 理解Windows下Python环境搭建 案例 安装Python,写出第一个P ...

  8. codeforces 651B B. Beautiful Paintings

    B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...

  9. freeMarker(三)——模板开发指南之数值、类型

    学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 模板开发指南——数值.类型 1.基本内容 1.1 什么是数值? 正如你 ...

  10. mci播放mp3

    1MIDI的播放---- 乐器数字化接口(MIDI)是由音乐界的一些大公司(包括生产电子音乐合成器的公司)制订的一项协议,后来被计算机产业所采用并成为多媒体音乐文件的标准格式.MIDI文件一般较小,对 ...