C语言指针

一、前言

这一篇是对前一篇指针的补充

二、野指针

野指针就是指针指向的位置是不可知的(包括随机的、不正确的、没有明确限制的)
几点说明
1.局部的指针变量。换句话就是没被初始化,指针变量的随机值。例如:int* a;没有进行初始化
2.指针越界访问。例如,数组中的指针变量p访问的数据个数超过了数组数。
3.指针指向的内存空间释放。
第三点结合代码理解:

int * test()
{
int a=10;//创建局部变量a,出这个函数变量会被销毁,地址会返回操作系统
return &a;
}
int main()
{
int*p=test();
*p=20return 0}

避免野指针的方法:
1.指针一定要初始化,实在不知道赋啥值,就赋一个空指针(NULL),补充:NULL的定义是((void*)0)
2.小心指针越界
3.指针指向的空间如果释放(还给人家),那么我们需要将指针置空。
4.使用指针之前要检测有效性。
总而言之:要养成一个好习惯,使用指针的时候给它初始化,指针不用的时候给它置空。
关于第三点的举例:
代码,int a=10;int* pa=&a;*p=20;这个时候我们已经把a已经操作好了,然后pa指针我们不打算再用它了,我们可以把pa置空,此时pa不再指向任何空间,这样就很好避免了未来这个指针变成野指针。

三、指针运算

1.指针±整数
2.指针-指针
3.指针的关系运算(指针比较大小)
关于这几点的解释
第一点:已经在上面的笔记讲过
第二点:指针减指针实际算出来的是中间元素的个数(指针-指针在同一块空间才有意义)
例如:int arr[10]={1,2,3,4,5,6,7,8,9,10};&arr[9]-&arr[0];//结果是9
在这里插入图片描述
特别注意
在这里插入图片描述

四、指针和数组

在这里插入图片描述

五、二级指针

利用代码举例:

int*p=&a;//一级指针
int **pp=&p;//二级指针
int ***ppp=&pp;//三级指针

特别注意
*pp得到的操作数是p;**pp的操作数才是a

六、几个易混淆的名称

指针数组—数组
数组指针—指针
好孩子------孩子

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

含目的基因的质粒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值