目录
一、内存与地址
1.1 内存
在我们生活中住宿楼里每个房间都有一个门牌号可以方便我们能够快速的找到想要去的房间,内存与此相似,我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,内存空间会把内存划分为一个个内存单元方便高效管理,每个内存单元的大小取1个字节。
(计算中常见的单位换算)
⼀个比特位可以存储⼀个2进制的位1或者0。
每个内存单元也都有⼀个编号(这个编号就相当于房间的门牌号),有了这个内存单元的编号,CPU就可以快速找到⼀个内存空间。生活中我们把房间门牌号也叫地址,在计算机中我们把内存单元的编号也称为地址。C语言中给地址起了新的名字叫:指针。
所以我们可以理解为: 内存单元的编号==地址==指针
1.2 编址
CPU访问内存中的某个字节空间,必须知道这个字节空间在内存的什么位置,而因为内存中字节 很多,所以需要给内存进行编址。计算机中的编址,并不是把每个字节的地址记录下来,而是通过硬件设计完成的。计算机内是有很多的硬件单元,而硬件单元是要互相协同⼯作的,所谓的协 同,至少相互之间要能够进⾏数据传递,每个硬件是相互独立的需要通过“线”来连接。而CPU和内存之间也是有大量的数据交互的,所以两者必须也⽤线连起来。
二、指针变量与地址
2.1 取地址操作符(&)
在C语⾔中创建变量其实就是向内存申请空间,
#include <stdio.h>
int main()
{
int a = 10;
return 0;
}
比如,上述的代码就是创建了整型变量a,内存中申请4个字节,用于存放整数10,其中每个字节都 有地址,上图中4个字节的地址分别是: