关闭

C++之指向const对象的指针和const指针

标签: c++
134人阅读 评论(0) 收藏 举报
分类:

1.指向const对象的指针

我们可以通过指针来修改其所指对象的值,但如果指针指向的是const对象,则不允许使用指针来改变其所指的const值。C++要求指向const对象的指针也是const类型。


const double *pd;                 //可以指向一个const double类型。

 

这里的const限定的是pd所指的对象,而不是pd。这里的pd是可以重新指向另外的一个地址的,但不允许使用pd来改变所指向对象的值。

把一个const对象的地址赋给非const对象的指针会导致编译时错误,例如:

const int a=8;

 int *p=&a;                 //error

const int *cp=&a;      //ok


不能使用void*指针保存const对象的地址,可以使用const void*类型的指针保存const类型的地址。

允许把非const对象的地址赋值给指向const对象的指针:

int c=3;

cp=&c;


虽然c不是const类型,但是使用cp修改c的值会导致编译错误。cp被定义为指向const对象的指针,那么cp就不能改变其所指对象的值。

指向const对象的指针所指的对象不一定是const对象,所以不能保证所指的对象的值不可更改,应为毕竟其所指的对象可以是非const对象,可以使用其他方法更改其值。

可以把指向const对象当做“自以为指向const对象的指针”来理解。

在实际的应用中,指向const对象的指针常用作函数的形参,这样可以保证在函数中不会应为形参改变实参所指的对象。

 2.const指针

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

int num=4;

int *const p=#

可以把p理解为p是指向int类型的const指针。这就意味着不能使p指向其他对象,任何试图给p赋值的操作导致编译错误。const指针必须在编译时初始化。

该指针是const并不代表就不能修改其所指对象的值。如果const指针指向非const对象,那么就可以使用该指针修改所指对象的值,例如

int e=9;

int *const p=&e;

*p=6;


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

还有一种指向const对象的const指针,如下使用:

const int d=4;

const int *const p=&d;

这样p的值不能修改,p指向对象的值也不能修改。



 转载:http://blog.csdn.net/zhy_cheng/article/details/8047737

0
0
查看评论

const指针 与指向const的指针的区别

const 指针与指向const的指针 当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。       先说指向const的指针,...
  • z1026544682
  • z1026544682
  • 2016-08-09 09:43
  • 1228

C++ 使用const指针来传递对象

采用指针来传递对象,虽然可以避免重复调用复制构造函数和析构函数,但是由于它得到了该对象的内存地址,可以随时修改对象的数据,因此它实际上是破坏了        按值传递的保护机制。         不过我们呢仍然有解决...
  • helainthus
  • helainthus
  • 2016-05-14 16:17
  • 682

c++const指针与函数调用

在我的博客http://blog.csdn.net/caoyan_12727/article/details/52064958中,已经讨论了动态绑定和静态绑定,以及在缺省参数情况下虚函数的绑定情况。一般情况下,我们 是用非const的基类指针指向派生类对象,如果通过该指针调用虚函数则发生的动态绑定...
  • caoyan_12727
  • caoyan_12727
  • 2016-09-10 10:50
  • 442

const修饰指针的用法:常量指针和指针常量

const通常用来修饰变量不能够更改值,多用来保护变量或参数。 const int b = 100; //b = 0;错误 当const修饰指针时,由于const的位置不同,它的修饰对象会有所不同。 如下代码,int *const p2中const修饰p2的值,所以理解为p2...
  • oguro
  • oguro
  • 2016-09-28 21:49
  • 2208

const与指针结合的三种情况

//1.const int *p //不能修改指针指向的内存空间中的值 //2.int * const p //不能修改指针本身指向,但是可以修改指向内存空间的值 //3.const int * const p //无论是指向的内存空间还是指针本身的值,都不可以修改
  • vs9841
  • vs9841
  • 2015-10-29 09:21
  • 605

指向const变量的指针去当参数形参的好处

指向const变量的指针去当参数形参的好处, 在编写一个函数时,当已经确定这个函数不会更新数据值只是读取的话,就把指向const变量的指针设置成参数吧. 就算实参是非const变量也没有关系的哦.都能保证函数的正确性,都能保护形参指针所指向的对象,使其在函数执行中不被修改,这就是你在大量的代码示例中...
  • dayuqi
  • dayuqi
  • 2012-10-21 19:35
  • 2336

C++中引用、指针与const之间的爱恨情愁

学过C语言基础的肯定都知道变量和数据类型是再简单不过的知识,然而这个基础中确有几个泥潭,稍有不慎就粉身碎骨——编程受阻,面试被刷。其中一个就是引用、指针和const,以及相互之间剪不断理还乱的关系。今天我们就来理一理。 1.引用是个什么鬼 1.1引用的概念 引用是为对象另外起的一个名字,也就是别名而...
  • xueyushenzhou
  • xueyushenzhou
  • 2016-08-30 21:59
  • 1854

C语言中的const用法以及常量指针与指针常量(有口诀!)

编了这样的口诀,记住,应该不难: const(*号)左边放,我是指针变量指向常量; const(*号)右边放,我是指针常量指向变量; const(*号)两边放,我是指针常量指向常量; 指针变量能改指向,指针常量不能转向! 要是全都变成常量,锁死了,我不能转向,你也甭想变样! 例一 ...
  • xiaocheng198810
  • xiaocheng198810
  • 2014-11-27 10:19
  • 3220

C++中const修饰指针探讨

在C++里,const修饰指针有以下三种情况 (1)const  int  *p;   const在类型前,称指向常量的指针,可以这样理解它的功能,因为const在int前,所以p指向的这个int变量对于*p来说是const的,即不能通过*p改变这个变量的值,但是...
  • CHEN_JP
  • CHEN_JP
  • 2012-04-18 16:44
  • 3306

[笔记]C++中 对const类型指针的强制类型转换操作

int * const elems ; int * p=(int*)&elems; int ** q=(int**)&elems;
  • White_kitty
  • White_kitty
  • 2016-10-26 20:48
  • 631
    个人资料
    • 访问:58696次
    • 积分:1199
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:22篇
    • 译文:0篇
    • 评论:12条
    最新评论