写点什么

【C 语言】指针 One 之 [概念、前言、内存、地址与指针、变量与地址]

作者:泽En
  • 2022 年 5 月 12 日
  • 本文字数:2323 字

    阅读完需:约 8 分钟

【C语言】指针One之[概念、前言、内存、地址与指针、变量与地址]

​🚩write in front🚩

🔎​​Hello,大家好我是泽 En,一起共同学习,多多指教(●'◡'●)🔎

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🖊

📢2021 年度博客之星物联网与嵌入式开发 TOP5,2021 博客之星 Top100 阿里云专家博主^星级博主 CSDN⇿掘金⇿InfoQ[创作者]

💎 概念

指针是 C 语言的显著的优势之一其中使用起来是十分的灵活。而且是能够高效率的提高程序的使用,但是,如果使用使用不恰当的话程序是很容易被"挂死"的往往都是错误导致指针造成的。之所以 C 语言到现在还能够适应时代其中指针是不可或缺的 🎄

那再来说说指针的优缺点吧。

指针的优点→是标识一块内存。电脑内存上的每一个字节都具有一个编号,称为地址(可以简单理解为指针),任何读写内存的指令都必须携带地址信息,否则电脑不知道读写那块内存。不管程序是用什么语言写的,要运行数据和代码必须驻留内存,CPU 要执行指令必须有一个"指针"程序计数器指向内存的代码块,如果某个指令要操作内存数据,该指令必须携带额外的地址信息 🌹

指针的缺点→指针可以操作任何东西,所以指针很灵活、很强大,但也引入了复杂性 🎋


🍁 前言 

指针!指针!指针!重要的事情说三遍,之所以这样说是因为指针对于我们学习 C 语言真的是特别特别的重要。可以说会指针和不会指针那就是天壤之别 🤐

你想要成为"C 语言大佬"指针就必须玩的起来,这样就是你成为大佬的第一步,相比之前的内容,指针会难上一点,但只要肯下功夫,多多打磨、多去理解、多去上手练习,迟早你就能把指针玩开了 😋

有些初始 C 语言的小伙伴们,可能一遇到指针就会放弃或者对指针不够重视。千万不能有这样的想法,你想学习 C 语言到后面的话指针是你一定要跨越的"山峰"当你跨过这段"山峰"的时候到达顶端时候,你就会感慨值了",所以加油,干就完事了 😤

指针是 C 语言的显著的优势之一,其中使用是十分灵活的而且能提高某些程序的效率,但是如果使用不当则很容易造成系统错误。许多程序"挂死"往往都是错误地使用指针造成的 😱  


⚔ 内存

计算机当中所有的数据都是必须要放在内存当中的,不同类型的数据占用的字节数不一样。

如果当我们买回来的计算机当中有 4g 内存或者 8g 内存空间,那么我们因该如何去使用它们呢🤔

解释:内存(空间)的使用跟我们"现实"生活当中有非常相似的地方,在我们"现实"生活当中国土面积总共有 960 万平方公里,就像是当我们真的是去访问这些内存空间的时候,都给了它们的一个有效的地址。比如:这个时候我们想去找到一个地方,有省,其次市、县、镇、乡这样不同的规划。然后找到你人在哪里,而我们现实生活中市怎么样找到这一块空间的那就是通过地址,而这个地址又是跟我们一个个"房间"是相互关联的。我们是不是跟每一个房间都整理了编号,然后通过地址就可以找到房间⇩

那么其实对于内存也是一样的,内存是一块大的空间,如下流程图所示⇩


当我把内存划分成这样一个长方体的格子之后, 那么其实就是和生活当中的房间是一样我们现实生活当中给每一个房间都编了号。

而我们内存空间也是一样,划分着每一个格子也相应的进行编号。这就是内存空间的管理方式。


🗡 地址与指针 

概述:在计算机中,所有的数据都是存放存储器内存当中。一般把存储器中的一个字节称为一个 内存 占用的内存单元数不等,如整型量占 4 个单元,字符量占 1 个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确的找到该内存单元,内存单元的编号也叫做地址。 既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元可以用一个通俗的例子来说明 它们之间的 到银行去存取款时, 银行工作人员将根据我们的帐号去找我们的存款单, 取款的金额。在这里,帐号就是存单的指针, 存款数 是存单的内容。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元 的内容。 语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针 🤩

Ⅰ地址就是内存区中对每个字节的编号。

Ⅱ指针看作是内存中的一个地址,多数情况下,这个地址是内存中另一个变量的位置。

在程序中定义一个变量,在进行编译的时候就会给改变了在内存当中分配一个地址,通过访问这个地址可以找到所需的变量,这个变量的地址称之为该变量的 "指针"

🍊指针就是用来存储内存变量的当中的地址!①个内存单元 == ①字节 

🍊地址就是用来通过内存区的编号找到变量,然后再把自己内存区的编号赋值给指针。

从上述的话就可以看出来,为什么也会说其实指针无非就是地址,地址无非就是指针了。


🗡 变量与指针 

变量的地址是 变量 指针 二者之间纽带,如果一个变量包含了另一个变量的地址,则可以理解成第一个变量指向第二个变量。所谓 "指向" 就是通过地址来进行实现的。 因为指针变量是指向一个变量的地址,所以将一个变量的地址值 赋值给这个指针就 "指向" 了该变量 😜

例如:将变量 i 的地址值赋值给指针变量 p 中,p 就指向 i,其关系如下所示↓

在程序代码中是通过 变量名 内存 单元进行存取操作的,但是代码经过编译后已经将变量名转换为该变量在内存中存放的地址,对变量值的存取都是通过地址进行的。如下代码所示

a+b
复制代码


其含义是:根据变量名与地址的对应关系,找到变量 a 的地址。假设 1000,找到变量 i 的地址 1000,然后从 1000 开始读取 4 个字节(整形类型)存放在 CPU 的寄存器当中,再找到变量 j 的地址 1004 ,从 1004 开始读取 4 个字节数据存放在 CPU 另一个寄存器当中,通过 CPU 的加减法从中计算出来 🙄

发布于: 刚刚阅读数: 2
用户头像

泽En

关注

一起happy! 2022.01.29 加入

谁也不知道旅途的终点是怎么样的,现在只不过是开始。便全力以赴!终点必将是星辰大海。 2021年度博客之星物联网与嵌入式开发TOP5 2021博客之星Top100 阿里云专家博主^星级博主 CSDN⇿掘金⇿InfoQ[创作者]

评论

发布
暂无评论
【C语言】指针One之[概念、前言、内存、地址与指针、变量与地址]_C语言_泽En_InfoQ写作社区