指针和const

《C++ Primer Plus》第五版  P200~P202

两种不同方式将const关键字用于指针。第一种是让指针指向一个常量对象,可以防止使用该指针来修改所指向的值。第二种是将指针本身声明为常量,可以防止改变指针指向的位置。


int age=39;
const int *pt=&age;
声明一个指向常量的指针pt,pt指向一个const int(39),因此不能使用pt来修改来修改这个值。即*pt的值为const,不可以被修改。

*pt=20;//不合法
cin>>*pt;//不合法

注意:pt的声明并不意外着它指向的值时间就是一个常量,而只是意外着对pt而言这个值是常量。例如pt指向age,而age不是常量。可以通过改变age变量来修改age的值,但不能使用pt指针来修改它。

age+20;//合法

注意:将const变量的地址赋给指向const的指针可行,将const的地址赋给常规指针不可行。


尽可能使用const

将指针参数声明为指向常量数据的指针原因如下:

1)可以避免由于无意间修改数据而导致的编程错误;

2)使用const使得函数能够处理const和非const实参,否则将只能接受非const数据。(如果条件允许,则应将指针形参声明为指向const的指针)


int age=39;
const int *pt=&age;
const只能防止修改pt指向的值,而不能防止修改pt的值,即可以将新地址赋给pt。

int sage=80;
pt=&sage;
但是仍然不能使用pt来修改它指向的值。


使用const方式使得无法修改指针的值:

int sloth;
const int *ps=&sloth;//a pointer to const int,不允许使用ps来修改sloth的值,但允许ps指向另一个位置
int * const finger=&sloth;//a const pointer to int,finger只能指向sloth,可以用finger来修改sloth的值

声明指向const对象的const指针
double trouble=2.0E30;
const double *const stick=&trouble;
其中,stick只能指向trouble,而stick不能用来修改trouble的值。简而言之,stick和*stick都是const。


通常,将指针作为函数参数来传递时,可以用const指针来保护数据。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值