热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第10章指针基础:深入解析内存地址单元

本章深入探讨了指针的基础概念,详细解析了内存地址单元的运作机制。通过实例分析,读者将全面理解指针在内存管理中的关键作用及其应用技巧。

 

     声明:文中观点仅代表个人,其中文字、图片未经本人许可,不得部分或全部转载,违者所造成影响后后果自负!联系本人方式:80368704@qq.com QQ:80368704


10.1 内存单元地址
       我们每个人,在不断的成长,无论何时,都在不断的学习着,通过书本,通过师傅,通过失败,我们不断的总结着,不断的整理着自己的知识,使其系统化,理论化,以便能解决更多复杂的问题。但是具有这样条理清晰,结构完整的学识,我们经过了若干年,学习了若干代人的经验,经过了若干次的实践,一切的一切都是那么来之不易。从最初的一点点皮毛接触(感性认识),到完备知识体系的建立(理性认识),我们再把这些知识传授给其他人,哪里是一天两天可以教会他们的呀。指针是C语言博大精深之处,认识它,其实是在进军操作系统核心部分;指针是C之所以被称为中级语言的重要原因之一,它继承了汇编语言的内存单元的直接和间接访问的手段,使我们用高级语言编写的程序的效率大幅提高。指针的用途和优点是多多的,但是指针对不熟悉系统工作原理,尤其是对存储器原理不清楚的人,是不容易掌握的,因此我们对指针的讲解从内存的工作原理讲起。

       在我们的计算机中,主要的内存叫做RAM(Random Access Memory),即随机存取存储器,在计算机的基础课中我们就了解到,RAM的主要作用是存储程序代码和数据供CPU在需要的时候调用。RAM对于系统性能的影响是每个PC用户都非常清楚的,那么它是如何实现程序和数据的存取的呢?

       程序和数据的存取,并不是像堆放山药蛋那样简单,而是更像是超市存包处用箱格子存放物品一样,不但要放进去,还要能在需要的时候准确的取出来。

1 2 3 4 5 6 7 。。。。。。。。。。。。。。。。。。。。。。。。。。。9999
▼▼▼▼▼▼▼                                                                                                                       ▼
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

       上面的示意图中的小园点代表RAM中的储物箱,每一个圆点是一个小箱,,每个小箱有一个唯一的编号。计算机术语把一个小箱子称为一个字节.RAM就是由许多字节组成的,如上图中小圆点组成的细线。这里每个字节的编号是数字的,编号从0开始,即第一个字节的编号是0,依次第2个字节的编号是1,其后是2,3,4,5,6.............直到最后一个字节,当整个内存共有100个字节,最后一个字节的编号就是99;而当我们的内存共有10000个字节时,最后一个字节的编号就是9999了。一般的,我们称这个编号为该字节的地址编号,简称地址。

       上面的内容,貌似原理,你仔细看看,其实很简单的哩, 你把CPU和RAM当作两个人,CPU是存取包裹的人,RAM是存包处的管理员!具体举例:设包裹名为50,箱格子的号是2000,如下:

       如果CPU要想从RAM那里取(包),而且现在包被存在(箱号)为2000的(箱)中,这时CPU首先需要向RAM提供(箱号)即2000,以便RAM定位待取的(包)50,然后等待若干个时间单位之后,RAM就会根据(箱号)2000定位到(包)50,并把(包)50交给CPU。我们现实生活中的超市存包处,一个箱格子是只放一个包的,哈,于是取包的过程可以用下图表示:

          地址 2000▼            RAM                                                           CPU
= = =.......= = = = = = = = = = = =........ = =                                     = = = = = =
||                                                            ||      <←←<←←2000      ||             ||
||........................50................................||                                     ||             ||
||                                                            ||      50 >→→>→→ >      ||             ||
= = =.......= = = = = = = = = = = =........ = =                                     = = = = = =
       超市存包处被划分为许多格子,每个格为最小的单位,一个格存一个包,如果你一个人有3个包,那么就给你3个格子哦;我们把一个格子称为一个 存包单元

       回到计算机中,如果CPU想要从RAM中调用的(数据),存放在(地址编号)为2000的(字节)中,这时CPU它首先需要向RAM提供(地址)即2000,以便RAM定位待存取的(数据)50,然后等待若干个时间单位之后,RAM就会根据(地址)2000定位到(数据)50,并把(数据)50交给CPU。
       前面我们已经提到,作为内存的RAM是以字节为最小单位的,你的数据如果1个字节放不下,可以给你2个字节或更多嘛,如此而已。类似存包处把每个格子称为存包单元,我们把每个字节称为内存中数据存取的单元,简称为 内存单元。每个内存单元的地址编号,简称为 内存单元地址


       哈!一切的一切就是如此的简单,你,对指针的理解,已经有了一个胜利的开始,衷心的祝贺你,我的朋友!

推荐阅读
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 本文详细介绍了C语言中的指针,包括其基本概念、应用场景以及使用时的优缺点。同时,通过实例解析了指针在内存管理、数组操作、函数调用等方面的具体应用,并探讨了指针的安全性问题。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文探讨了高质量C/C++编程的最佳实践,并详细分析了常见的内存错误及其解决方案。通过深入理解内存管理和故障排除技巧,开发者可以编写更健壮的程序。 ... [详细]
  • C语言标准及其GCC编译器版本
    编程语言的发展离不开持续的维护和更新。本文将探讨C语言的标准演变以及GCC编译器如何支持这些标准,确保其与时俱进,满足现代开发需求。 ... [详细]
  • 解析SQL查询结果的排序问题及其解决方案
    本文探讨了为什么某些SQL查询返回的数据集未能按预期顺序排列,并提供了详细的解决方案,帮助开发者理解并解决这一常见问题。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • #点球小游戏fromrandomimportchoiceimporttimescore[0,0]direction[left,center,right]defkick() ... [详细]
  • 本文探讨了如何使用自增和自减运算符遍历二维数组中的元素。通过实例详细解释了指针与二维数组结合使用的正确方法,并解答了常见的错误用法。 ... [详细]
  • Python 学习是否需要先掌握 C 语言?
    Python 是一门非常适合编程入门的语言,很多人疑惑是否需要先学习 C 语言才能更好地掌握 Python。本文将详细探讨这个问题,并为初学者提供专业的建议。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • 编写了几个500行左右代码的程序,但基本上解决问题还是面向过程的思维,如何从问题中抽象出类,形成类的划分和设计,从而用面向对象的思维解决问题?有这方面的入门好书吗?最好是结合几个具体的案例分析的 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
author-avatar
Victoria625_176
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有