分享
 
 
 

理清 指针、引用和const的”暧昧“关系 (1)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

理清 指针、引用和const的”暧昧“关系 (1)

在C++中,指针和引用的引入大大的方便了developers的工作。但是一旦和const勾搭到了一起,它们就有点不太听话,经常会给

初学者带来一些困惑。下面就我的所知,将"const+指针"及"const+引用"总结一下,不当之处还请指点。

一、指针和引用

关于 指针和引用的基本用法大家都知道。偶就不具体介绍了。

二、const+指针

为方便起见,我们用基本的数据类型int的指针来介绍。替换成其他的类型同理(但如果是两个单词组成的类型,如int *要注意,可能会有结合次序的问题)

如下面所示:const 和指针交错在一起,有三种形式

int i = 10;

(1)const int * pi1;

(2)int const * pi2;

(3)int * const pi3 = &i;

其中(1)const int* 和(2)int const * 用法相同(我自己的总结,没见过教科书这样说,哪位高手知道区别的话,请指教,3x!^_^)

下面着重比较(1)与(3)的区别。

可以用下面的方法巧妙地区别他们

1、在(1)(2)中,const是和类型int紧紧依偎在一起,所以指针pi1和pi2指向的对象是const int型的。既然是const的对象,当然

不能通过解引用指针来改变他们的值。但是因为指针pi1自身和const不靠在一起,山高皇帝远,所以const对pi1并没有束缚力,

可以随便改变指向的对象。例如

const int i = 10;

int j = 20;

const int*pi=&i;

*pi = 11; //错误:不能通过pi来改变i的值

pi = &j; //正确:指针本身并非const,所以可以改变指向的对象

这里用了一个const int 和int型的变量,是为了让读者知道int型的变量可以被赋给const int的,但是反之不行。

2、在(3)中,const紧紧靠着指针变量pi3,pi3不敢妄为,必须被接受初始化,指向一个对象,而且初始化后只能乖乖的接受这样

的事实。但是为了安抚它,也给了它一点特权,允许通过指针pi3改变一下指向的对象的值。如下例所示:

int i = 10;

int j = 20;

int * const pi = &i; //必须要被初始化

pi = &j; //错误:如果这样做,要被满门抄斩的

*pi = 11; //可以,i现在是11了

三、const + 引用

先介绍一下引用特殊的地方

引用必须被初始化,初始化后引用变量就和被引用变量捆绑在一起,不能重新指向新的引用,对引用变量操作都是作用在被

引用变量上的。例如:

int i = 10;

int j = 20;

int & ri = i; //必须初始化

ri = 11; //改变了i的值

ri = j; //引用变量ri现在指向j了吗?NO! ri还是指向i,这等效于i = j;只是用j来赋值给i罢了,i的值现在是20

同二中,const+引用可以总结为三种形式:

int i

(1)const int & ri = i;

(2)int const & ri = i;

(3)int & const ri = i;

同指针一样,(1)和(2)是相同的。

1、我们先从(3)开始说起,同指针类似的,const在这里只是对ri起作用,我们可以通过引用变量ri来改变被

引用变量i的值。我们说过,引用本来不可以重新指向对象,所以这里没有这个const也是一样的,但是如果出现了这样的语句

结果会如何呢?我们看下面的代码:

int i = 10;

int j = 20;

int& const ri = i;

ri = 11; //i现在是11

ri = j; //OK!虽然有const限制,但是仍然是可以的,因为这里并不是改变指向的对象,只是用j的值来赋值而已

2、(1)(2)就和指针差不多完全一样了,不可以改变通过ri改变值。如:

int i =10;

int j =20;

const int&ri1 = i;

int const& ri 2 = i;

ri1 = 11; //错误,就算是ri = 10也不可以

ri2 = 20; //错误,同上

i = 1; //OK! 对i并没有限制啊

四、对指针的引用

对指针的引用有一些容易让人误解的地方。具体以后再介绍。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有