【中级】C语言 知识点总结 (五)指针(2)

     Hello,大家好!我是柚子,上次我们讲到了一级指针,今天我们来更深入了解一下“指针”的其他方面的知识。

 一、二级指针( 与一级指针有什么关系?)

我们上一章讲了int* p,其中p是指针变量,里边存放对象的地址,类型为int*,那么是不是可以由此推出二级指针有两个解引用(*)符号,但是具体是怎么操作的呢?它的里边存放的又是什么内容?接下来一直一张图片告诉你:

图中用二级指针pp来存放提取出来的p的地址,类型为int*。

*pp就等于p,再次解引用* *pp之后,就得出来a,这么解释是不是好理解一些,我们来运行一下代码:

由此看出两次解引用之后能提出a的内容,是不是也没有很复杂,一级指针变量p是变量,二级指针pp同样也是变量,不过是用来存放一级指针变量的地址。

二、指针数组( 指针 or 数组 ?)

什么是指针数组,它到底是一个指针还是一个数组,刚接触到这个名词的时候我还没反应过来,但是我突然想到了另一个名词整型数组,那这么一看就明朗多了,顾名思义,整型数组就是一个数组里边包含的元素都是整型的,包括还有字符数组。到此,我们再来看一下指针数组,那不就是一个数组里边包含的元素都是指针类型,所以指针数组它是一个数组,而且这个指针还有类型。

了解了以后,我们来看看它有什么用:( 怎么用指针数组模拟实现二维数组?)

如上图分析,将单个的数组存放在int*类型的数组arr中,那么理论上是可以实现的,那么我们来看看具体的源代码实现过程,如下图:

这个代码里的arr[i][j]就等于 *(*(arr+i)+j),联系一下上边的二级指针。

注意:上述的代码是模拟出二维数组的效果,实际上并非完全是二维数组,因为每一行并非是连续的。

三、野指针和悬空指针

二者的区别:野指针和悬空指针都是指针管理问题中可能出现的问题,它们的主要区别在于指针的状态不同。

野指针指的是没有经过初始化的指针,它的指向地址是不确定的,可能指向任何有效的内存区域,因此在使用该指针进行解引用操作时,结果是无法预测的。野指针通常是由于程序猿①忘记给指针分配内存或者②在程序执行过程中指针被意外地修改导致的。

悬空指针又叫做僵尸指针,是因为指针曾经指向某个内存块,但是这个内存块已经被释放了。在这种情况下,指针的值并没有被设置为 NULL,因此它仍然保持原来的值。由于指针不再指向任何有效的内存区域,对悬空指针的操作可能会导致意外的行为或不确定的结果。

为了避免这两种问题的出现,程序员们应该遵循一些良好的编程习惯,如确保指针在使用前已经正确初始化,以及在必要时使用 `free` 或 `delete` 来释放不再需要的内存资源。此外,还需要注意指针的使用边界,以避免越界访问和其他潜在的风险。

今天的内容先讲到这里,如果对你有帮助的话,一键三连支持一下吧!

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我为IT舔砖Java

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

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

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

打赏作者

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

抵扣说明:

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

余额充值