32位--32地址线(cpu从内存或硬盘中取数据时,会根据地址线传来的地址来确定数据的存储单元,后通过数据线来读取数据)--物理线--通电--1/0(1通电?0无电?)
64位同理
从而实现了电信号-->数据信号(0,1组成的二进制)的转变
32位机器通常是32个bit来组成一个地址。
32位组成的所有可能性(2的32次方)
000....000(总32个)---------------------->一个内存编号0? ? ? ?总共个序列(4GB)
? ? ? ? ? ? ? +1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1
00....0002(总32个)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2? ? ?
....? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .......
....? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ......
111...1111(总32个)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
个序列都可以做为内存的编号(内存单元的地址)
个内存单元每个单元是一个字节(byte),然后分配地址,一个地址最小一个字节??
内存地址本身并不是特定大小的数据,而是用来指示存储器中位置的标识符
在大多数计算机体系结构中,内存地址通常是以字节为单位进行编址的。因此,每个内存地址通常对应一个字节的大小
然而,在32位系统中,内存地址本身通常是4个字节(32位)大小,这是因为它需要足够的空间来存储地址。因此,内存地址的大小通常是由计算机体系结构和操作系统决定的
vs软件中按F10(变成调试模式)--调试--窗口--内存与监视? ? ?地址是&a
int a=10;?查看时为ox(16进制)调试时得运行到int a=10的下一行
0a是一个字节 00是一个? 0a 00 00 00是四个字节 对应int大小的四个字节
16进制中a是10,b是11.....
注意!!! &a其实拿到的是四个字节中的第一个字节(小的)的地址
int *pa=&a;
int是说明pa执行的对象(a)为int的类型的,? ? ? ? pa用来存放地址,在c语言中pa叫做指针变量,*为解引用,*pa说明了pa是指针变量,*pa就是通过pa中的地址找到a的 。? ? ? ? ? ? ? 有(*pa)=a的意思。
int a=10;
*pa=20;
printf("%d,a);
打印出a等于20;
无论什么类型的变量,指针的大小都相同,其取决于存地址要多大,
比如说机器是32位的,则指针大小都是4byte(32bit) 64位则是8byte
x86是32位 x64是64位。