一、内存和地址
内存及其管理方法:
1.计算机主存储器由一个一个存储单元组成,微型计算机以字节作为存储单元
2.内存区的每一个字节有一个唯一的编号,这就是“地址”,它相当于教学楼中的教室号
3.内存地址,是一个无符号整数(unsigned int) , 它是一个以当前系统寻址范围为取值范围的整数
4.主存储器的所有存储单元的地址是连续的
5.在32位系统下,由于使用的是32位地址,其寻址能力也就是地址空间为4G的字节,0-2的32次方-1
内存被划分为一个个的单元,一个内存单元的大小是一个字节
注意:内存单元的地址与内存单元中的数据是两个完全不同的概念
二、指针:
1.在程序中定义了一个变量,对程序进行编译时,系统会给这个变量分配内存单元
2.编译系统根据程序中定义的变量类型,分配一定长度的空间:
每个字符变量分配1个字节
每个整型变量分配4个字节
3.一个变量占用存储区域的所有字节都有各自的地址,C系统把该变量在存储区域中第一个字节的地址作为此变量的地址
4.由于通过地址可以找到所需的变量单元,可以说, 地址指向该单元,将地址形象化的称为指针
内存单元的编号=地址=指针
三、编址:
32位机器有32根地址总线,每根线只有两态,表示0,1【电脉冲有/无】,那么一根线,就能表示2种含义,2根线就能表示4种含义,依次类推。32根地址线,就能表示2^32种含义,每一种含义都代表一个地址
地址信息被下达给内存,在内存上,就可以找到该地址对应的数据,将数据在通过数据总线传入CPU内寄存器。
四、取地址操作符(&)
在C语言中创建变量其实就是向内存申请空间
上述的代码就是创建了整型变量a,内存中申请4个字节,用于存放整数10
取地址操作符(&)的使用:
这里%p是专门用于打印地址的
结果是以16进制的形式输出的
虽然整型变量占用4个字节,我们只要知道了第一个字节地址,顺藤摸瓜访问到4个字节的数据也是可行的。
五、指针变量的定义和引用操作符(*)
如: int* pl,*p2;
与int *pl, p2;
int* 表示指向整型数据的指针类型,读作"指向int的指针"或简称"int指针"
指针变量名是pl,p2,不是*pl,*p2
指针变量只能指向定义时所规定类型的变量
指针变量定义后,变量值不确定,应用前必须先赋值
第五行中: *是在说明pa是指针变量
int表示pa指向的对象是int类型的
再比如:char* pc=&ch; 则表示有一个char类型的变量ch,ch的地址存放在指针变量pc中
pa是指针变量,是专门用于存放地址的,地址又被称为指针,指针变量是用来存放指针的
指针变量也是一种变量,只要是存放在指针变量中的值都会被理解为地址
指针(笔记1) 二+https://developer.aliyun.com/article/1519983?spm=a2c6h.13148508.setting.18.5c984f0e9ej6IA