关键字 --- const

const修饰的对象,其值在编译期间是不会被改变的;

const int a = 3;
//a = 5; // 报错!a的值不允许被修改

当const和*放在一起时,此时可以在心里从右往左默读,这样就可以,辨别出,const修饰的对象到底是谁!修饰的是指针?还是修饰的是指针所指向的变量?

比如:

int const * const // ---> constant   pointer to   constant int

这里,const既修饰指针,又修饰int型数据( 也就是,指针所指向的变量 )! 

注意以下区别:

int const p;
const int p;

这两个是等价的!const都是修饰变量p!当const只与基本数据类型( 或者自定义的数据类型 )放在一起时,const放在基本数据类型( 或者自定义的数据类型 )前面,与const放在基本数据类型( 或者自定义的数据类型 )后面,效果是等价的,都是修饰变量,使得变量的值不能发生改变!但是,此时,一般是将const放在基本数据类型( 或者自定义的数据类型 )前面

const、基本数据类型或者自定义的数据类型、*,放在一起时,就要注意,const修饰的究竟是谁!可以用上面说的方法,从右往左读,来辨别const修饰的究竟是谁!如果const没有修饰指针,那么const修饰的就是指针所指向的变量!也可能,const既修饰指针,又修饰所指向的变量!

以下几个经典:

(1)

int *const p;

从右往左读:const pointer to int

所以,const修饰的是指针变量p,指针变量p的值不能被改变!也就是,指针变量p只能,始终指向某一个变量,不能再指向其他变量!但是,指针变量p所指向的这个变量的值,是可以发生变化的!

(2)

const int p;

这里,只有const与基本数据类型int放在一起,所以,const修饰的是变量p,变量p的数据不能被改变!

(3)

const int *p; // 等价于 int const *p;

从右往左读:pointer to int const ---> pointer to const int

const修饰的是基本数据类型int,也就是,const修饰的是指针所指向的变量!这里从另外一个角度思考,const没有修饰指针,所以,const修饰的一定是指针所指向的变量!

所以,指针p的值是可以变化的,也就是,指针p可以指向不同的变量!但是,指针p所指向的变量的值是不能发生变化的!

(4)

const int *const p; // 等价于 int const *const p;

从右往左读:const pointer to int const ---> const pointer to const int

可见,const既修饰指针p,又修饰指针p所指向的变量!

所以,指针变量p的值不能被改变!也就是,指针变量p只能,始终指向某一个变量,不能再指向其他变量!而且,指针p所指向的变量的值,也不能发生改变!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值