内存的基本单位是字节,那么内存就可以按字节进行编址,就是给组成内存的所有连续的字节安排地址。其中一个最恰当的比喻就是房子与门牌号,假设有20间连续的房子,从最左边(或者左右边)开始分配门牌号1~20,给内存中字节分配的地址就相当于门牌号,字节就相当于房间。字节的容量只能存储一个字符。那么,内存是如何存储比字符更大的数据呢,比如:整型数据、浮点型数据?
为了存储更大的数据,就会把两个字节或者跟多的字节合在一起组成更大的内存单元。比如内存可以以“字”为单位来存储整型(一个字一般由2个或者4个字节组成)。
如图所示:
以字节为单位
以字为单位(假设四个字节组成一个字)
以“字节”为单位时,每个字节都会有一个地址,那么当以“字”为单位时,它的地址该如何确定呢?这一个字该有几个地址?硬件又该怎样读取他们的数据呢?
尽管一个字包括四个字节,但是却只有一个地址。至于它到底是四个字节中的哪一个地址,这又会涉及到一个概念:大小端存储模式。
大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向
大增加,而数据从高位往低位放;
小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值
高,低地址部分权值低,和我们的逻辑方法一致。
如上图所示,每个字中都储存了一个整数,如果我想要存取某个字中的数据,那么我必须记住这个字所对应的地址即可。但如果到了实际当中,这种方法就变得不可行了,因为记住每个字的地址显然是非常麻烦的事,因此就有一个好的办法来代替:通过名字来访问内存的位置。如图所示:
这些字母就是我们所说的变量。但是,字母与内存位置之间的关系并不是硬件提供的,而是编译器给我们实现的。编译器就像是一个中间层,对我们而言,我们看到的只是字母。对硬件而言,还是通过地址访问内存位置。编译器所完成的就是将字母与地址连接起来。
【C语言学习】指针再理解(一),布布扣,bubuko.com
原文地址:http://blog.csdn.net/xgsilence/article/details/32391487