【初阶】C语言----指针

目录

一、什么是指针

二、指针和指针类型

三、野指针

四、指针运算

五、二级指针

六、指针数组


一、什么是指针

1、浅谈指针

理解指针的俩要素:

指针是是内存中最小的单元编号,就是地址;

指针变量是用来存储地址的,也就是平时所说的指针;

2、内存

我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数 据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼ 效的管理呢? 其实也是把内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。

每个内存单元也都有⼀个编号,有了这个内存单元的编 号,CPU就可以快速找到⼀个内存空间。在计算机中我们 把内存单元的编号也称为地址。

C语⾔中给地址起 了新的名字叫:指针。

所以我们可以理解为:

内存单元的编号 == 地址 == 指针

注释:内存单元的编号是以16进制展示给我们看的。

3、指针变量

为了更好地访问地址内存,我们需要运用到&(取地址操作符)来取出一个变量的内存起始地址,把这个地址放到一个指定的变量中去,这个变量就叫指针变量。

例如上图p变量就是一个整形类型的指针,p变量的内存里面存储的就是存储了整形变量a的地址。


二、指针和指针类型

1、指针变量

C语言为我们提供了丰富的指针类型,如下图

其中因为数组指针和函数指针也有类型,故上图是还没有具体到函数类型的整体指针类型;

指针的组成

指针变量的组成

指针的大小:32位的机器一个地址有32个bit位,需要四个字节来存储指针变量;                                          64位的机器一个地址有64个bit位,需要八个字节来存储指针变量;                                 

2、解指针

我们将地将地址存起来后,以后要用到的时候怎么取出来呢?

这就要用到一个操作符叫解引用操作符(*)

 上面第六行代码就是用到了解引用操作符,*p的意思就是通过p变量储存的地址,找到了指向的空间a,*p变量其实就已经是a变量了,而*p=0,这个操作就把a改成了0。


三、野指针

1.野指针的概念

概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)。

2、野指针形成的原因

(1)指针未初始化

注释:指针未初始化,默认为随机值。

(2)指针越界访问

注释:当指针越界访问的时候,这个指针就是野指针。

(3)指针指向的空间释放

注释:变量num为局部变量,生命周期从创建开始到出test函数结束,test函数调用结束后num会将空间还给操作系统,此时回到主函数p的地址已经被释放,此时p就是野指针。

3、如何规避野指针

        如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋值NULL. NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址 会报错。


四、指针运算

指针的基本运算有三种,分别是:

• 指针+- 整数

• 指针-指针

• 指针的关系运算

1、指针+- 整数

指针+-一个整数的意思就是指针指向的首元素地址向后移动多少个字节的地址,如下;

2、指针-指针

指针-指针的绝对值意思就是俩个指针之间的元素个数。

注释:指针+指针无意义。

3、指针的关系运算

指针存储的是一个地址,所以在同一数组的时候(数组的地址是从低到高的),可以比较俩个指针的大小


五、二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥?

这就是⼆级指针 。

其中ppa就是二级指针,指向的是指针变量pa的地址,指针变量pa就指向变量a的地址。


六、指针数组

指针数组是指针还是数组? 我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。 那指针数组呢?是存放指针的数组(不要与数组指针混淆了)

指针数组是用来存放每一个元素地址的的。如下图:

   


     以上就是c语言初阶指针的内容啦,有什么总结不到位请多多指教,可以的话请给个三连,一起学习吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值