坚持不变的const

学习C语言至今,const这个关键字想必大家没少见吧,有时候对它还挺迷的,今天我们就来看一下const的基本语法。
在说const之前我们先来看一下左值和右值
左值:在赋值号左边的变量,可以进行写操作(权限)。
右值:在赋值号右边的变量,只能进行读操作(权限)。
eg.1:

int a=10;
int b=a;//表示把a的值读出来,给b进行写操作
a=20;//给a写值

现在我们来说一下const:
const用来限定变量权限,把变量变为只读不能写的变量。
eg.2:

const int ca=10;
ca=20;//error,因为ca为只读,不能写
const int cb;//error因为没有定义的变量为任意值,所以不能前面加const

const的相关规则:

  • 基本数据类型(int,char,float等)对于const是透明的,可以直接穿过,要记住const是限定变量而不是类型。
    eg.3:
const int ca=10;
int const ca=10;

这两条代码的意思是一样的。

  • 对于指针,const只能限定修饰的直接右边,即右边离const最近的变量
    eg.4:下面代码我们不讲究语法错误,意在说明const的用法
const int *p=&a;//const穿过int,修饰直接右边*p,所以*p不可以进行写操作,即不能在等号左边,但p可以进行写操作
p=&a;//?
*p=100;//error
int const *p2=&a;//const可以直接穿过int
int *const p3=&a;//const的直接右边为p3,所以p3不能写操作,但*p可以
p3=&b;//error
*p3=100;//?
const int *const p4=&a;//两个const,第一个限制了*,第二个限制了p4,所以p4和*p4都不可以进行写操作。
p4=&b;//error
*p4=100;//error
  • 权力可以同等传递或缩小传递,但不能放大传递。(通俗来讲,就是一个人从图书馆借了一本书,他只有读的操作,他不能写,他把这本书让别人看,别人也不能写,只能读,他也可以不让别人看,这就是权力的同等传递和缩写传递,但他不能让别人写,这便是不能放大传递。)
    eg.5:下面代码我们不讲究语法错误,意在说明const的用法
int main()
{
int a=10;
const int ca=10;
int *p1=&a;//?因为a没有限制
int *p2=&ca;//error因为ca是不能改的,而p2只是一个普通的变量,若它指向了ca,便可以通过解引用来改变ca的值,非法。
const int *p3=&a;//?因为a没有限制
const int *p4=&ca;//?因为两个都是不能修改的,所以就算p4解引用了ca,但是它不会去改,因为*p4被限制了,可以
int *const p5=&a;//?因为a没有限制
int *const p6=&ca; //error因为const限制的是p6,它保证了永远指向ca,但*p6可以变,会改变ca的值,所以错误。

大家一定要牢记这几条规则,把const使用无误。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值