1. const修饰指针
2. 指针运算
3. 野指针
正文
1.1 const修饰指针
我们定义的变量是可以修改的,如果把变量的地址交给一个指针变量,通过指针变量的修改也是可以达到修改这个变量的效果的。那如果我们不想让这个变量被修改,给他上一把锁,要怎么做呢?
这里就需要用到const,请看代码演示
运行结果
我们可以看到编译器爆出了错误,对m的修改失败,这就是const的作用,在语法上加了限制,我们直接对m进行修改时是不符合语法规则的,因此编译器报错。
但是如果我们不对m直接进行修改,而是绕过m,使用m的地址去修改m就能修改成功了,不过这种做法是在打破语法规则
通过上面的代码我们可以看到,n的值确实是被修改了。大家可以思考一下,我们使用const是为了不让n这个变量被修改,但是我通过n的地址打破语法规则还是能修改n,那要怎么样才能使n无法通过地址被修改呢?我们继续往下学习
1.2 const修饰指针变量
我们通过代码运行来分析
这里忘记具体操作了,大家自行调试哈(狗头)
结论:const修饰指针变量的时候
const如果放在*的左边,修饰的是指针指向的内容,保证指针的内容不能通过指针来改变,但是指针变量本身的内容可以改变。
const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针变量的内容可以通过指针改变。
2.指针运算
指针的基本运算有三种
指针+-整数
指针-指针
指针的关系运算
2.1 指针+-整数
我们知道数组在内存中是连续存放的,因此只要知道第一个元素的地址就能够顺势找到后面的所有元素。
2.2 指针-指针
代码演示
2.3 指针的关系运算
3. 野指针
什么叫野指针?
野指针就是指针指向的位置是不可知的(随机、不正确、没有明确限制的)
3.1 野指针的成因
3.1.1 指针未初始化
3.1.2 指针越界访问
3.1.3 指针指向的空间释放
3.2 如何规避野指针
3.2.1 指针初始化
既然知道了成因,那就对症下药
如果明确知道指针指向哪里就直接赋值地址,如果不知道,可以给指针赋值NULL,NULL是C语言中定义的一个标识符常量,他的值为0,0也是地址,这个地址无法使用,读写该地址的时候会报错
代码演示
初始化如下
3.2.2 小心指针越界