const char

const char *p;他的意思是p指向的目标空间的内容不可变化

 

例如定义char c='A'; p=&c;则c的内容不可以变化.如c='B';等一些企图改变变量c的值的做法都不行. 然而p仍然是动态的,就是它还可以指向别的空间,被赋予新的地址值,只是被他指向的目标空间的内容不可变化,如上面的c值始终为'A',不可以更新,而一但p指向别处,则c就更新了. 问题补充中的变化实质上是p的值的变化,这是允许的.因为字符串出现在表达式中时它的值是它的首字母的地址,所以"xxx"和"yyy"都是地址值. 而若企图改变*p的值则是非法,例如问题补充中,企图修改"yyy"中第1个y所在位置的值则被认为是非法的. 最后我想说const char *p;与char * const p;的区别,他们恰好相反,后者是表明指针p的值不可变,但它指向目标的值可变. 例如char * const p; char c='A',m; p=&c;执行后,c='B'可以执行,但p=&m则被认为是非法.

 

 

 (const (char *) const )&a 

定义中用到&是独立引用.
比如:
char i;
char &a=i;
表示a是i的一个单独引用.
当有i='a'时,也有a='a';
当有a='c'时,也有i='c';
两个变量的标示符都代表同一个内存空间地址.

声明中带有const时,表示为常量.
对const char* const &a=i从右读起
const &a表示a为常量,一开始要对其赋值,这里赋予i,表示a是i的一个单独引用.在以后的程序中,不能对a本身进行值的修改,即不允许有&a=othervaries 之类的赋值语句.

const char * const &a
是在const &a的基础上声明:const char *a,即对*a(a所指向的内容为常量,不可更改),在以后的程序中,不允许有这样的语句:*a=90;

所以整个声明可以理解为:a 是i的一个别名,且永远是i的别名(不会变成其它变量的别名).不能利用a来修改i的值.a只是对i的值的引用. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值