C++primer 第二章中 const限定符知识点和部分例题解析以及学习心得感受

本文详细探讨了C++中const限定符的使用,包括指针与const的关系、顶层const和底层const的概念。通过实例解析,帮助读者理解const在不同情况下的作用,同时分享了学习过程中的心得体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、关于const 限定符的知识点

 const表示不可改变的量!const用在变量定义时的类型前表示该变量不可改变,注意:该变量必须初始化(可以在运行时初始化)。
 例子:
 const int buf;                            不合法,因为变量为初始化。
 int cnt=0;                                合法。
 const int sz=cnt;                         合法。
 ++cnt; ++sz;                              不合法,变量sz是一个const变量,不能被改变。

2、指针与 const 的知识点:

 (1)指向常量的指针:不能用于改变其所指对像的值。要想存放常量的地址,只能使用指向常量的指针。
 (2)常量指针:指针自身是一个对象,不可变。int *const p = &pi   (常量指针必须初始化,则他的值就不能改变了)
 (3)指向常量的常量指针。const  int *const p (不仅指针本身不可变,指针所指对象也不可变)
   例子1:下面哪些初始化时合法的,理由?
     a、int i=-1,&r=0;                                          
     b、int *const p2=&i2;
     c、const int i=-1,&r=0;
     d、const int *const p3=&i2;
     e、const int *p1=&i2;
     f、const int &const r2;
     g、const int i2=i,&r=i;
    解析:
     a:引用r的赋值对象必须是一个对象,所以不合法
     b:合法,将p2设为一个常量指针,初始化为i2对象的地址
     c:合法,将i设为常量,r设置为常量的引用(注意const   int   &r = 0  是正确的,但是int  &r = 0是不正确的)
     d:合法,p3为指向常量的常量指针,初始值为i2的地址
     e:合法,p1为指向常量的指针,初始值为i2的地址
     f:使用不合法
    g:合法,正常的赋值。
  例子2:说明下面的定义是什么意思?
      a、int i,*const cp;
      b、int *p1,*const p2;
     c、const int ic,&r=ic;
     d、const int *const p3;
     e、const int *p;
     解析:
     a:不合法,常量指针cp未初始化
     b:不合法,常量指针p2未初始化
     c:不合法,常量ic未初始化
     d:不合法,常量指针p3未初始化
     e:合法
  例子3:假设上一个练习中的定义的那些变量,则下面的哪些语句是合法的?请说明原因。
     a:   i=ic;
     b:p1=p3;
     c:p1=⁣
     d:p3=⁣
     e:p2=p1;
     f:ic=*p3;
     解析:
     a:合法
     b:不合法,const int 和 int 不是一个类型,指向常量的指针在赋值时必须类型一致
     c:不合法,原因和b相同
     d:不合法,p3是一个常量指针,不能被再次赋值
     e:不合法,p2是一个常量指针,不能被再次赋值
     f:不合法,ic是个常量,不能被再次赋值

3、顶层const与底层const
知识点:
(1)顶层const:指的是本身不可以被改变(表示指针本身是个常量)。
(2)底层const:指的是自身所指对象不可以被改变(表示指针所指的对象是个常量)。
(3)用于声明引用的const都是底层const。

 例子1:(1)const int v2=0;  (2) int v1=v2;  (3)int *p1=&v1,&r1=v1; (4)const int *p2=&v2, *const p3=&i,&r2=v2;
 解析:
 v2是顶层const;
 p2是底层const;
 p3最左是底层,右侧是顶层const;
 其它都不是const;
 
知识点:顶层const的拷贝不受限制,但是底层const的拷贝的对象必须具有相同的底层const资格。一般来说:非常量可以赋值给常量,反之则不行。

例子2:假设以有上一个练习中所作的那些声明,则下面的哪些语句是合法的?请说明顶层const和底层const在每个例子中具体如何实现?
r1=v2;
p1=p2;p2=p1;
p1=p3;p2=p3;
解析:
a:合法;
b:不合法,p1是非常量,p2是常量,不能进行赋值操作;
c:合法;
d:不合法,p3既是底层也是顶层const,所以都得考虑到;
e:合法;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值