初阶指针简介

目录

一  什么是指针

二  指针和指针类型

三  野指针

四  指针的运算


 一、指针是什么

理解指针的两个重要的点:

1、指针是一个单元中一个最小单元的编号,也就是地址

2、平时口语中的指针,通通常指指针变量,是用来存放内存地址的变量

1.1内存

想要认识指针,应该先要理解内存。内存是电脑上的存储设备,常见的内存有4/8/16G。在程序运行时,会加载到内存中,也会使用内存空间。 一个内存单元为一个字节大小 ,内存单元有编号,以便于操作(编号又名地址、指针)。一个内存单元的大小为一个字节。

1.2指针变量

指针变量是一种变量,是专门用来存放地址的变量

&a意思为取出a的地址    取出字节的地址(较小的地址)图中a的地址为0x0012ff40

若pa = &a,则pa为指针变量用来存放指针。不同类型的指针变量创建方式基本相同,譬如 int*意为创建整型指针 char*意为创建字符指针,*p中的  * 号为解引用操作。

二、指针和指针类型

我们都知道变量有类型,整型,浮点型......相对着,指针也有相对应的类型

2.1、指针类型是有意义的

指针的不同类型,提供了不同的视角去观看和访问内存

指针类型决定了,指针在进行解引用操作的时候·,一次性访问几个字节char*类型访问一个字节、int*类型 访问四个字节、float*类型 访问四个字节。

2.2、指针类型决定了指针的步长(步长意为:*p += 1到底跳过几个字节)
    字符+1,跳过一个字节
    整形+1,跳过四个字节

 

2.3、指针解引用时可以加减操作

指针解引用时进行加减操作时,表示从当前地址向低向高访问地址,跳过的步长为 n*sizeof(*p)

三、野指针  

野指针存储的地址是随机的

3.1、野指针的成因

野指针的成因大致有以下几种

1、指针未初始化

 

2、指针的越界访问

如图所示,arr数组仅有十个数字,而for循环了十一次,那么在循环第十一次时,出现了指针越界的现象,导致第十一次打印出的是乱码。

 

3、指针指向的空间释放

如图所示,在函数中创建的a变量,其作为局部变量,在函数结束后便将内存空间返还给电脑。以至于在主函数中对a变量的地址进行解引用操作时,打印出的为乱码,此为指针指向的空间释放。

3.2如何规避野指针

1、指针初始化
      指针可以通过赋值NULL来初始化,但不能直接使用,需要在使用前判断指针!=NULL再使用

2、小心指针越界

3、指针指向空间释放,及时置NULL

5、指针使用前检查有效性

4、避免返回局部变量的地址

四、指针的运算

4.1 指针+-整数

如图所示,*vp++意为vp+1,通过一次循环,将*vp指向的地址中存储的变量值赋值为0,并且通过vp+1使得vp指向的地址向后移动一个字节,然后在下一次循环中将该地址内容赋值为0,以此循环,直至将整个数组的地址中存储的值全部赋值为0。


4.2 指针+-指针
     得到的是指针和指针之间的元素个数

如图所示,arr[9]-arr[0]意为这两指针之间的元素个数,共计9个元素。

 

4.3 指针关系运算(比较大小)

总结

在此次文章中,我们简单了解了什么是指针,指针的类型,野指针,以及指针的运算。在理解指针中,首先要理解电脑在运行程序时需要依靠内存,进而理解电脑在运行程序时,会根据代码将内存空间划分为一个个内存单元并且进行编号,以便电脑对于特定的内存空间进行操作。由此拓展开的便有指针的类型以及指针的运算,使得我们在使用中能够更加灵活多变。而在使用指针时一定要注意避免使用野指针,并且在使用指针前,可以验证指针的有效性,从而降低报错率。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值