C++笔记

C++学习笔记之const与*的组合


前言

const是一个承诺,承诺一些东西是不变的,保持const是因为实际上可以简化很多代码。const与*的组合有三种,遵循**“左定值,右定向”(左右是指const在星号的左或右)**的基本规则,如下


1. 指针常量const int * p 等价于int const *p

const在星号的左边,作为一个指针常量,p是指向常量的指针,也称为 底层const。此时不能通过*p改变这个变量的值,但变量本身可以改变值,也可以改变p的指向。

例:
int x = 2;
int y = 3;
const int *p = &x;
*p = 4;   //error,不能通过*p改变变量的值
 x = 4;    //ok,x不是一个常量,可以改变自己的值
 p = &y;   //ok,指针p本身不是一个常量,可以改变p的指向。

2. 常量指针int * const p

const在星号右边,作为一个常量指针,也称为 顶层const,即指针p本身是个常量,不能改变p的指向。但可以通过*p改变所指向变量的值。

例:
int x = 2;
int y = 3;
int * const p = &x;     //注:因为指针p是常量,在声明时就应该初始化。
*p = 4;   //ok
x = 4;    //ok,x不是一个常量,可以改变自己的值
p = &y;   //error,指针q本身是一个常量,不能改变它的指向。

3. 指向常量的常量指针const int * const p或int const * const p

const int * const p(底层const)or int const * const p (顶层const),前两者的结合,即不能改变p的指向,也不能通过*p改变所指向变量的值。

例:
int x = 2;
int y = 3;
const int * const p = &x;
*p = 4;   //error,不能通过*p改变所指变量的指。
x = 4;    //ok,x不是一个常量,可以改变自己的值
p = &y;   //error,指针p本身是一个常量,不能改变它的指向。

总结

从上面可以看出,变量本身永远可以改变自己的值,除非变量本身声明成常量const int x=2。
区别三种情况的关键:const在类型前还是在指针前。在类型前,不能通过*p改变变量的值,在指针前不能改变指针的指向,且在声明时就要初始化。
Note:const对象必须初始化,const int i =2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值