C++中 const与指针的再探讨

     通过编译器的再编译和学习,指针与const结合这一块我觉得有必要结合实践深入探讨一下 
首先要注意以下规则
1.*p和q是不同的(假设q指向对象p)
2.一定要知道const具体修饰的是什么
还要遵循编译器的编译原则
3.const定义的对象不能通过其他方式改变
4.cosnt定义的对象必须赋初始值
5.const作用是限定为只读而不能存储
6..*p本身不作为对象看待

const int *a;这个语句中int和const限定的都是*a。
指针a是个对象,但是*a本身不理解为对象。



这样就解释了为什么里面会有那么多的“例外”,我们来一一讲解。


1.常量不能用指向变量的指针指向。
具体:
const int a;
int *p=&a;
这句话是错误的,因为可以通过*p修改a,违反了编译原则,即.const定义的对象不能通过其他方式改变。


2.const int *a这句话不用赋初值,并且可以改变a的指向的对象值
因为const修饰的*a,赋初始值是给对象a的,a并没有限定,而*a本身不是对象,是不用赋初始值的,但是a的值可以写入,同时*a不是一个对象,所以可以通过a指向的对象直接修改来达到改变*a的目的。
也就是说:
const int *a;
a=NULL;//这个语句合法
*a=1;//这条语句不合法,因为*a被const限定不能写入
int b;  a=&b;b=7; //这条语句是合法的,因为b本身没有被限定,可以修改;
const定义的对象不能通过其他方式改变。
*a虽然限定了const但是其本身不是对象,可以通过其他方式改变 


3.const int *a;其中不能把a赋给其他变量指针。
a本身是变量指针,是可以自由读取和存储的,但是*a是不能够存储的,也就是说如果b=a;那么*b就打到了存储*a的功能,所以是不被允许的  。
这也说明了为什么却可以用a=b;因为这样并不会改变*a是不能够存储的,且a本身是变量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值