C语言复习—指针(2)

目录

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 小心指针越界

⼀个程序向内存申请了哪些空间,通过指针也就只能访问哪些空间,不能超出范围访问,超出了就是
越界访问。
3.3.3 指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性  
我们可以把野指针想象成野狗,野狗放任不管是⾮常危险的,所以我们可以找⼀棵树把野狗拴起来,就相对安全了,给指针变量及时赋值为NULL,其实就类似把野狗栓前来,就是把野指针暂时管理起 来。不过野狗即使拴起来我们也要绕着⾛,不能去挑逗野狗,有点危险;对于指针也是,在使⽤之前,我们也要判断是否为NULL,看看是不是被拴起来起来的野狗,如果是不能直接使⽤,如果不是我们再去使⽤。
3.2.4 避免返回局部变量的地址
可参考第三个成因
这次就到这儿,下次继续
有错误的地方欢迎各位进行指正或者给出一些建议
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值