前言
在上一篇文章当中,我们讲到了如何规避及麻烦的野指针,我们通过对指针进行初始化,只在指针的作用域内部使用指针,在使用指针前先判断指针是否为空等方式,对野指针进行了规避,那么接下来就让我们看看,在指针这一章当中还有什么是我们需要注意的吧~~
1.使用const修饰指针
1.1用const来修饰变量
变量本身是可以被修改的。
const:常,const 变量名:那么此时这个变量就具有了常属性,即无法被修改,但其的本质仍然为变量(即内部的值仍可以通过某种方式进行修改)
const仅在语法上对其进行了限制,在对其进行修改的时候会报警告,导致变量的之无法被修改。

但const并不会改变这个空间的地址,(仍能通过之前的地址找到这个变量),只是内部的值无法改变,但仍然能作为一个变量参与各种运算。

1.2如何绕过const的作用
const的作用就好比路障,阻止直接进入
被const限制的变量,由于找不到,其的无法被直接修改,在使用赋值对于其中的数据进行覆盖的时候,编译器会发现并发出警告。
*pa,相当于通过其地址发现了另外一条路,相当于走后门。
举一个比较形象的例子,前段时间电视剧《狂飙》,当杀手想要杀死证人的时候,由于证人被警察保护起来了,一般人发现不了,无法将其直接杀死,而杀手则通过获取到的地址从而找到证人并将其杀死。

1.3 const修饰指针变量
const修饰指针变量相当于把房子的后门也给封了。
const int a=0;
const修饰指针变量有两种形式:
1>const int*pa=&a; <==>int const *pa=&a;
①即此时const放在*以前,修饰的为变量*pa,限制的为指针(int* pa),无法由*pa的方式来修改pa所指向的空间的变量的值,”把后门关了“,
②变量pa未被限制,可以储存其他变量的地址。只是*pa无法访问其内部存储地址所指向的空间而已
#include<stdio.h>
int main()
{
const int a = 0;
const int b = 2;
int const* pa = &a;
*pa = 100;//不成立,无法修改
pa = &b;//仍可以用来储存不同空间的地址
*pa = 100;
printf("%d %d ", a, b);
}
相当于由*pa修改在pa位置上的变量a的值的功能失效了
2>int* const pa=&a; 此时const限制的为变量pa。
①指针变量中存储的地址就无法改变了,只能用于存放a的地址
②*pa能访问a的空间,仍可以pa来访问其所指向的对象的内容

注:
1.pa的这块空间当中存放的为地址(a的地址)
2.pa本身也为变量,自己也为一块空间,也有自己的地址
3.*pa为p指向的那块空间
4.若const int*const pa这两个功能就都无法使用,既无法改变a,也无法用于存放其他变量的地址
好了,今天的内容就到这咯,敬请期待我的下一篇佳作吧,😜
创作不易,欢迎点赞,收藏,关注❤
本文详细解释了如何使用const修饰指针,包括常量指针的原理、绕过const的方法以及const修饰指针变量的不同情况,强调了const在限制指针操作中的作用。
446





