目录
1.内存
内存是电脑上的存储器,计算机中的程序运行都是在内存中进行的。
a.内存的管理
内存首先是被划分成一个个的内存单元,每一个内存单元是一个字节的大小,并且每一个内存单元都有对应的编号。但编号又是多少呢?
这就与我们的电脑硬件有关了,假设我们电脑是32位机器,那么在32位机器上就有32根地址线(电线),在运行时会被通电,也就产生了高电频与低电频两种电信号,转换成数字型号就是
0和1两种。又因为是在32根地址线上,那么很容易知道会有2的32次方种情况,那么也就是我们的内存单元的编号了。
那么2的32次大小的编号可以管理多少内存呢?
那就是 (2^32)/1024/1024/1024=4GB的内存空间。
而内存单元的编号就是一个个地址,C语言中地址又被叫做指针。
举个例子:
我们创建了整型变量a,那么就要向内存中申请四个字节的空间,也就是四个内存单元,而我们的每个内存单元都有一个对应的编号(地址),那么哪一个才是我们a的地址呢?
看数据图,这四个内存单元确实都有编号(地址),而0x0043FCB0才是a的地址,那么
得出结论:最小的那个编号就存放着a的地址,但四个内存单元一起储存a(10)的
我们再看看内存中的数据 0x00 00 00 0a,为什么是用十六进制数字呢?
内存中本来放的是二进制的数字,但为了更好的展示出来,是用十六进制的数字展示的。
而地址(指针)又存在哪里呢?
p是用来存地址的也就是存放指针的,我们就叫p为指针变量,类型是 int*
int:说明p指向的a是int类型的。
*:说明p是指针变量是用来存放地址的。
我们也可以通过访问a的地址去找到a呢。
2.指针变量的大小
我们已经知道指针变量是存放指针(地址)的,那指针变量的大小应该是多少呢?
提前声明一下我这是64位机器。
为什么会是8呢?
指针变量是存放地址的,而地址又是我们前面提到的编号。因为我这是64位机器,那么说就是有64根地址线(电线),所以存储这样的地址需要64个bit位的空间,也就是八个字节。
那么32位机器就需要4个字节存储地址,所以说32位机器上指针变量的的大小就是4个字节。
这里补充一点:平常我们口语说的指针,通常指的是指针变量,是用来存放内存地址的变量
这是初始的解释,接下来如果我还有新的领悟与学习,那么我会再更的噢!
如果觉得写的还行那就三连鼓励一波吧!如果觉得哪里有问题的请留言!