C语言指针底层

希望读者在阅读完本文后,能够加深对指针的理解.

        1.指针是什么?

  指针本质上是一种变量,是专门用来存放地址的一类变量。那么如何理解指针呢,我们常常能听到一句俗语“跑得了和尚,跑不了庙”,而这里的“庙”就可以当作“和尚”的地址,我们可以通过“庙”这地址来找到“和尚”,而我们在C语言中将这地址称为指针

        2.计算机中的内存

  内存是电脑上特别重要的储存器,计算机中的程序都是在内存中进行的。我们可以打开任务管理器(Ctrl + Alt + Delete)来查看当前各程序的内存使用情况(如图)。

 在使用中,为了能够有效利用内存,就将内存划分成一个一个内存单元,每个内存单元为1个字节。如同在生活中见到不同的人叫不同的名字,我们给每一个内存单元也赋予不同的编号(即地址),以便于使用。

  

  那么如果访问一个内存单元,那么它的地址是如何产生的呢?

  那么我们首先得知道电脑现在分为32位机器和64位机器,(在这里用32位机器举例)这个32呢指的是32根地址线(即电脑中的一根一根的线),每一根地址线在通电时有高频与低频之分,高频为1,低频为0,那么组合起来就有以下2^32种结果。

于是我们便可以用这些二进制序列一一作为内存单元的编号。

 这样我们就可以得到2^32个地址,也就是可以管理2^32个内存单元。

        3.内存与指针

  在上文我们知道,指针其实就是地址,地址就是内存单元编号,这三者本质上是相同的,只是在不同的情景下,三者的具体含义不同。那么在编写代码的过程中,指针与内存的关系又是怎样的呢?先上一段普通的代码

int main()
{
    int a = 1;
    return 0;
}

在这段代码中,计算机首先要为整型变量a向内存申请4个字节的空间,如图

 (注:这里的地址为假设值)那如果我们想要将a的地址打印出来的话,有如下一段代码

int main()
{
    int a = 1;
    int * p = &a;
    printf("%p", &a);
    return 0;
}

运行发现

 为什么a明明申请了4个字节的空间,打印其地址却只有一个地址呢?(下图为调试过程中内存窗口的各区域代表含义)

在调试过程中,我们可以发现

由此我们可以知道,在打印时打印的地址其实是其第一个字节的地址, 也就是说&a取出是a所占内存的四个字节中第一个字节的地址。指针变量p存放的也为a的第一个字节的地址。

        4.结语

  关于C语言的指针就先讲到这里,其他的细节留待下次来说。

  希望这篇文章能够帮助到你,谢谢你的观看!

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值