const和指针

指针真的是C++中最难的点之一,之前就提到过,多维数组和指针的关系。

现在思考指针和const的关系。

其中第一个点,C++禁止将const的地址赋给非const的指针。

例如 const int a=3;

int *b=&a;

如果进行这种操作,那么就可以通过b来修改a的值,与a是const类型矛盾。

然而,当指针是一级指针时,可以将非const指针赋给const指针(注意与上文的区别)。

例如:int age=39;

int *pd=&age;

const int *pt=pd;

当指针是二级指针时,这种操作不安全但是可以进行。

例如:const int **pp2;

int *p1;

const int n=13;

pp2=&p1;

*pp2=&n;

*p1=10;

从上例可以看出,将非const指针(&p1)赋给了const指针(pp2),在通过将n的地址赋给*pp2,这样就可以通过改变p1来改变n.

实际上这仍然是个一级指针的例子,只是通过了二级指针**pp2来连接p1和n.

因此,仅当只有一层间接关系时(如指针指向基本数据类型),才可以将非const地址或指针赋给const指针。

如果数据类型本身不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值