一.内存和地址
先了解内存中最小的单位——————byte-字节
由小到大内存中分为 bit - ⽐特位 byte - 字节 KB MB GB TB PB
其中1byte = 8bit 1KB = 1024byte 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB 1PB = 1024TB
二指针变量和地址 我们平常说的指针的全称叫做指针变量,在内存中可以形象的表示为发
其中每一层为一个字节。那么我们如何使用内存中地址?
这就要用到取地址操作符&和解引用操作符,以后会讲解。
三 究竟该如何理解编址
CPU访问内存中的某个字节空间,必须知道这个字节空间在内存的什么位置,⽽因为内存中字节很多,所以需要给内存进⾏编址(就如同宿舍很多,需要给宿舍编号⼀样)。不过,我们今天关⼼⼀组线,叫做地址总线。我们可以简单理解,32位机器有32根地址总线,每根线只有两态,表⽰0,1【电脉冲有⽆】,那⼀根线,就能表⽰2种含义,2根线就能表⽰4种含义,依次类推。址线,就能表⽰2^32种含义,每⼀种含义都代表⼀个地址。地址信息被下达给内存,在内存上,可以找到该地址对应的数据,将数据在通过数据总线传⼊CPU内寄存器。
比如我有一台32位地址总线的电脑是232byte=235bit 4GB = 22 GB = 212 MB = 222 KB = 232 byte = 235 bit 所以32位地址总线的电脑最多只能访问4GB的内存
四指针变量的⼤⼩
指针变量的⼤⼩取决于地址的⼤⼩ 32位平台下地址是32个bit位(即4个字节) 64位平台下地址是64个bit位(即8个字节)
五&和*
int a = 0;
int* pp = &a;
printf("%p",pp);
这是把a的地址取出来放到指针变量pp中
pp变量定义时候要加*:int *pp。用%p打印p也就是a的地址为如图。