const

1.c中的const:
const int a=10;
int *p=&a;
*p=30;
这时在C语言.c文件中中程序是没错的。在C语言中const修饰的变量叫常变量
常变量的处理规则在编译阶段,只是查看常变量有没有做左值,其他的处理和变量相同
所以只要不是const int a;a=10;就不会出错,但是可以通过指针进行间接修改

2.c++中的const:
const修饰的变量叫做常量,不允许修改,并且常量一定要初始化;所以上面的程序在c++中错误
const int a=100;
int arr[a];//这个语法在c++中是正确的,但是在C语言中是错误的

const int a=10;
int *p=(int*)&a;//强转是一定可以成功的,所以*p确实拿到了a的地址
*p=20;
cout<<a<<endl;
但是最终a的结果任然是10;
应为常量的处理是在编译阶段,用到常量的地方直接替换为常量初始化的值
所以结果相当于直接cout<<10;
const int a=10;
int *p=&a;//这时错误的虽然没有对常量进行修改但是没有办发杜绝修改的风险
const int* p=&a;
int *q=p;//这也会报错,类型不同
看const修饰什么东西只看const右侧

int a=10;
int* const p=&a;
int* q=p;
这时const修饰的是p,如果想要间接修改p必须存在二级指针,所以这个程序是正确的

int a=10;
int *q=&a;
const *p=q;
这时虽然*p对应的a可能被修改但是从const语法来看我们只用考虑const修饰的量,也就是从
本行语句之后开始判断是否存在被修改的风险

简述const关键字:从以下三个方面
1.c/c++ 常量/常变量
2.不允许修改请求处理
3.const修饰的成员变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值