C++ const修饰符和指针

C++ const修饰符和指针

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年04月10日
const修饰符,是用来修饰变量,被const修饰符,修饰过的变量,就叫做常量,常量是一种只能被读取,不能被修改的量。在C++声明一个常量时,不但要const修饰符还有在声明时就要给它进行初始化,你不给它初始化,编译器就会报错,不给const修饰符就不是常量,下面是对常量只读属性和声明的示例

void main()
{
const int a = 10;
a = 15;
}
在这里插入图片描述
当你尝试给常量赋值时,编译器会报错,并且给你提示,意思是表达式必须是可以修改的左值,证明了常量是不可以修改的,那么你不给常量初始化编译器又会报什么错呢?
在这里插入图片描述
我们可以看到当我不给常量赋值时,编译器报错,并提示常量a需要初始值设定项,证明了常量必须进行初始化操作。
那么我们用const修饰符修饰指针呢?又有什么样的效果?指针和普通变量不同指针存储的是地址,那么const修饰符对指针修饰产生的效果有三种。我们先说第一种。
先看代码和结果我们再说第一种
void main()
{
int x = 10;
const int *a;
a = &x;
cout << “a所指向的地址:” << a << “\n”
<< “a的解地址” << *a << “\n”;
}
在这里插入图片描述
通过结果和代码我们可以知道被const修饰符这样修饰的指针还是可以获得地址和解地址的,那么可以改变解地址后的值吗?因为指针是可以通过地址修改值的,那么让const修饰过还行吗?
在这里插入图片描述
这个错误和上面的是一样的,我们现在可以知道,const这样修饰的话,会使指针无法通过解地址修改x的值,这是第一种的效果,我们称它为指向常量的指针,那么第二种
在这里插入图片描述
在这里插入图片描述

我们发现第二种有两个错误,和之前的一样,意思这个指针要进行初始化,该初始化是固定不可修改的。
void main()
{
int x = 10; int *const a= &x;
*a = 15;
cout << *a << “\n”;
}
在这里插入图片描述
我们可以知道的是,这样修饰的指针是可以正常的对解地址的值进行赋值的,那么我们一般称它为常量指针
那么第三种呢则是这两种的结合体,不但不可以对解地址赋值,还不能改变指针所指向的地址,而且还必须进行初始化,反正就是什么都不能动,但是我们可以正常的读取值,这种结合了第一第二种特性,那么它名字也是结合的就是指向常量的常量指针,这就是const修饰符对指针修饰的三种不同的效果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值