【指针】指针详解(2)

文章目录

  • 前言
  • 数组名的理解
  • ⼀维数组传参的本质
  • 二级指针
  • 指针数组
    • 指针数组模拟二维数组
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

这篇博客将陪伴你漫步在指针的世界里,从它最简单的认识到深入探讨它的奥妙之处。我们将剖析指针的原理,揭开它的神秘面纱,一起领略它在内存管理、数据结构和函数操作中的独特魅力。通过学习指针,我们可以更加敏锐地感知程序的细微变化,如同一双敏锐的双眼,洞察代码的深邃之处。


提示:以下是本篇文章正文内容,下面案例可供参考

数组名的理解

具体内容可以此文章去查看深入理解数组名

⼀维数组传参的本质

相信大家到指针阶段,已经对数组内容有些许了解了,那么以为数组传参的本质到底是什么?
首先考虑一个问题,我们通常是在函数外部计算数组元素个数再传给函数,那我们是否可以直接在函数内部计算数组元素的个数呢????

先看一个程序
【指针】指针详解(2)_第1张图片
上面的程序可以看出,函数外部计算的数组元素个数是正确的,而函数内部计算的数组元素的个数是错误的

这就引出了一维数组传参的本质:数组传参本质上传递的是数组⾸元素的地址
一维数组传参时函数的形参部分理论上应该使用指针变量来接受数组首元素的地址。那么在函数内部sizeof(arr)计算的实际上是一个指针的大小而不是数组的大小。就是因为函数的参数部分本质是指针,所以在函数内部是没办法求数组元素的个数的
sizeof(arr)在32位平台是四个字节/sizeof(arr[0]])结果就是1

如果不明白指针变量的大小可以看这篇文章指针变量的大小

二级指针

先思考一个问题:指针变量是用来存放变量地址的,那么指针变量的地址可以存放在哪里?

答案就是二级指针来接受指针变量的地址
用一个图来说明他们之间的关系
【指针】指针详解(2)_第2张图片

二级指针说明(见代码)
【指针】指针详解(2)_第3张图片
这里ppb解引用后的结果是b的地址,足以说明二级指针存放的pb的地址,解引用得到pb所指向的内容即b的地址。

指针数组

什么是指针数组?我们可以类比来理解,整型数组是存放整型变量的数组,字符数组是存放字符变量的数组,那么指针就是存放指针的数组

注意:这里很容易和数组指针混淆,我们只需要关注他们的后缀就很好区分了。数组指针的内容再后续文章中说明
如图
【指针】指针详解(2)_第4张图片

指针数组模拟二维数组

【指针】指针详解(2)_第5张图片

总结

在本博客中,我们深入探讨了C语言中的数组和指针相关概念,包括数组名的特性、一维数组传参、二级指针以及指针数组。

  • 数组名: 它是数组首地址的常量指针,理解它有助于我们更好地处理数组的内存布局和访问方式。

  • 一维数组传参: 我们学到了数组传参的本质,即传递数组的首地址,这使得我们能够在函数内部对数组进行修改。

  • 二级指针: 深入了解了二级指针,为处理复杂的数据结构提供了便利,使我们能够在内存中建立多层关联。

  • 指针数组: 这种数组的元素是指针,每个指针指向内存中的一个地址,为我们提供了存储不同类型数据的灵活性。

这些概念的理解不仅为高效编程提供了基础,也为进一步学习复杂的数据结构和算法奠定了坚实的基础。通过这篇博客,希望读者能更深刻地认识这些关键概念,使他们的编程之路更为清晰和自信。

你可能感兴趣的:(c语言,c语言,开发语言,数据结构,后端,算法)