const、指针常量和常量指针的解释

const 限定符,定义的值不可以被修改。所以必须进行初始化。
1.必须进行初始化。

 const int i = 3;//编译时初始化
 const int i = GetSize();//运行时初始化

2.初始化完成后,任意给const变量进行赋值的操作都将引发错误。

const int i = 3;//编译时初始化
i= 5;//错误

3.默认状态下,const对象仅在文件内有效,多文件共享可使用extern
const的引用
1.引用及其对应的对象都是常量

const int c = 1024;
const int &r = c; //正确

2.引用的对象可以是普通对象

int c = 1024;
const int &r = c;//正确
//注意:普通非常量引用不能绑定常量		 
const int c = 1024;
int &r = c;//错误

const 的指针(参考c++ primer)

注:感觉与网上很多博客理解的不太一样,希望各位大佬多多指正。
指针常量 - 指向常量的指针,不能用于改变其所指对象的值

	     const double pi = 3.14;
		 const double *cptr = π//正确
		 *cptr = 20;//错误,所指对象的值不能改变
		 double dval = 3.14;
		 cptr = &dval;//正确,运行指向常量的指针,指向一个非常量对象
		 const double pay[3] = {1.11,2.22,3.33}; // const double 的数组,这意味着数组中的每个元素都是 一个 const double,编译器不会允许程序员编写改变数组内容的代码

常量指针 必须初始化,初始化完成,则它的值(也就是存放在指针中的那个地址)就不能再改变了。
把*放在const关键字钱,说明指针就是一个常量。

      int errNum = 0;
	  int *const curErr = &errNum;
	  *curErr = 0;//正确,将指针指向的对象重置

顶层const和底层const
顶层const 表示指针本身是个常量,更一般的,可以表示任意的对象是常量,这一点对任何数据类型都适用,如算术类型、类、指针等。
底层const 表示指向的对象是一个常量,与指针和引用等复合类型的基本类型部分有关。比较特殊的是,指针类型既可以是顶层const也可以是底层const。

           int i = 0;
		   int *const p1 = &i;        //不能改变p1的值,顶层const
		   const int ci = 42;         //不能改变ci的值,顶层const
		   const int *p2 = &ci;       //运行修改p2的值,底层const
		   const int *const p3 = p2;  //右是顶层,左是底层
		   const int &r = ci;         //声明引用都是底层

注意:执行对象拷贝操作时,顶层const基本不受影响,但是底层const在拷入与拷出时必须具备相同的底层const资格或者两个对象的数据类型必须能够转换。
一般来说,非常量可以转化为常量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值