Const修饰指针的理解

Const修饰指针的理解

开发工具与关键技术:Visual Studio、C++
作者:张国军
撰写时间:2019年04月25日

在说被const修饰的指针之前呢,我们先来了解一下const。对于const,我对它的理解呢,就是一个不可改变的,修饰一个不可改变的,当我们带上const的时候我就将它理解为不可改变的,当然并不是所以得时候,还有其他特殊的地方那就得细看了。
我们先来看一下const所修饰的int类型:
在这里插入图片描述
从图中我们可以看到,当a被一个const修饰的时候,我们再想对a得值进行改变的时候,会发现我们修改不了,进行报一个(表达式必须是可修改的左值)的错,从字面意思我们可以读到a是不可以修改的,所以我们可以将它理解为一个常量,值得一提的是当我们进行const修饰一个变量的时候,那么它就变为一个常量了,我们都知道常量是一个固定的值,所以我们必须对它进行初始化,不然的话编译器会进行报错:
在这里插入图片描述
我们对const有了初步的了解,那么我们来看一下一个最简单的const指针的组合,那就是const int*类型的

#include <iostream>
using namespace std;
int main()
{
	const int a=10;
	const int *p;
}

对于const int p,刚开始学的时候,我还以为是跟const int a=10一样是要给初始值的,当时后来理解之后才知道,并不是那样的。指针可以分类两部分,一个是类型前边的,一个是类型后边的,我们都知道指针的类型是(类型)比如int*、char*等,这才是我们指针的类型,那么我们指针类型前边的呢是指针指向的东西,类型后边的呢就是修饰我们指针的,就如我们上面的代码,const在类型的前边,那么它就是修饰指针指向的那边的。那么我们上面已经说了,const我们可以将它理解为一个常量,那么我们的指针就是,指向常量的指针那么我们的这个指针指向的就是一个常量。
在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
	const int a=10;
	const int *p;
	p = &a;
	cout << *p<<endl;
}

从上一遍文章我们有说道,我们可以通过指针去修改我们指针所指向的那块内存的值,那么我们是否可以通过指针去修改我们的呢?
这个也是不行的我们都知道const int a是一个常量,所以我们
无法进行修改的,还有就是,当我们一个普通的指针指向一个常
量的时候也是不行的,所以我们要使用对应的指针。
不然的话编译器将会给我们报错,所以这是一个值得注意的地方
在这里插入图片描述
那么下边我们来看一下当我们const修饰指针后边的时候,也就是 int * const p,从这里我们按照我们上边的说法就是int *是一个普通指针,那么const是修饰我们p的,那么我们将可以将它读为,常量指针,也就是我们的常指针。常指针呢它跟我们的指向常量的指针有一点的差异,我们的指向常量的指针是我们所指向的常量不能修改,但是呢,我们可以将它所指的常量进行改变,而常指针则刚好相反,它是所指的那个变量是不能改变的,但是那个变量的值是可以改变的。我们来看一下下边的实例:

那么当我们写一个常指针的时候我们必须给它初始值。
当我们给它一个NULL的初始值的时候,当我们再想去改变它所指向的地方是,我们会发现,是改变不了的,所以我们一开始的时候我们就要给一个我们想它指向的那块内存。

#include <iostream>
using namespace std;
int main()
{
	const int a=10;
	const int *p;
	p = &a;
	int b = 10;
	int* const p1= &b;
	*p1 = 20;
	cout << *p<<endl;
}

从代码上和结果我们都可以看出p1指向的变量的值是可以改变的,所以我们需要将这两个进行区分,这是两个是很容易搞混乱的。
下边我们再来看一个他们的组合体,那就是前后都有const修饰的指针,那就是const int * const p2;从上面们有说道了,那么这个我们就很容易就读出它的字面意思,那就是指向常量的常指针。
我们知道指向常量的指针是不能修改变量的值,但是它所指向的变量是可以改变。而常指针是自己所指向的那个变量是不能改变的,但是它指向变量的值是可以改变的。
那么我们就可以从这两个总结得出,那就是我们的const int * const p2它是即不能改变所指向变量的值,也不能改变所指向的变量。所以它是一开始就锁死了,啥也无法改变,但是它还是可以读取我们的数据,也就是我们的指向那块内存的值。
在这里插入图片描述
在这里插入图片描述
#include
using namespace std;
int main()
{
const int a=10;
const int * const p2=&a;
}
在这里插入图片描述
当我们需要给别看我们的数据的时候,但是我又不想给别人进行修改我们数据,那么我们就可以用到const int * const p2=&a;这个指针。
至于各位需要用到那个类型的指针,那就看各位的用法了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值