【C语言学习】指针再理解(一)

★内存和地址

内存的基本单位是字节,那么内存就可以按字节进行编址,就是给组成内存的所有连续的字节安排地址。其中一个最恰当的比喻就是房子与门牌号,假设有20间连续的房子,从最左边(或者左右边)开始分配门牌号1~20,给内存中字节分配的地址就相当于门牌号,字节就相当于房间。字节的容量只能存储一个字符。那么,内存是如何存储比字符更大的数据呢,比如:整型数据、浮点型数据?

★更大的内存单元

为了存储更大的数据,就会把两个字节或者跟多的字节合在一起组成更大的内存单元。比如内存可以以“字”为单位来存储整型(一个字一般由2个或者4个字节组成)。

如图所示:


                                                               以字节为单位


                           以字为单位(假设四个字节组成一个字)

以“字节”为单位时,每个字节都会有一个地址,那么当以“字”为单位时,它的地址该如何确定呢?这一个字该有几个地址?硬件又该怎样读取他们的数据呢?

尽管一个字包括四个字节,但是却只有一个地址。至于它到底是四个字节中的哪一个地址,这又会涉及到一个概念:大小端存储模式

★大小端存储模式

大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向

大增加,而数据从高位往低位放;

小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值

高,低地址部分权值低,和我们的逻辑方法一致。

★地址与内容


如上图所示,每个字中都储存了一个整数,如果我想要存取某个字中的数据,那么我必须记住这个字所对应的地址即可。但如果到了实际当中,这种方法就变得不可行了,因为记住每个字的地址显然是非常麻烦的事,因此就有一个好的办法来代替:通过名字来访问内存的位置。如图所示:


这些字母就是我们所说的变量。但是,字母与内存位置之间的关系并不是硬件提供的,而是编译器给我们实现的。编译器就像是一个中间层,对我们而言,我们看到的只是字母。对硬件而言,还是通过地址访问内存位置。编译器所完成的就是将字母与地址连接起来






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值