▶️文章目录
✅1.指针的概念
✅2.指针和指针类型
✅3.野指针
✅3.1野指针成因
✅3.2如何规避野指针
1.指针的概念
指针就是地址,口语中说的指针通常指的是指针变量
指针理解的2个要点:
1. 指针是内存中一个最小单元的编号,也就是地址
2. 平时口语中说的指针,通常指的是指指针变量
我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中
这个变量就是指针变量,是用来存放内存地址的变量
指针变量的大小:
对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是(1或者0);那么32根地址线产生的地址就会是:
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000001
...
11111111 11111111 11111111 11111111
这里就有2的32次方个地址。
每个地址标识一个字节,那我们就可以给(2^32Byte == 2^32/1024KB == 2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB)4G的空闲进行编址
总结:
指针是用来存放地址的,地址是唯一标示一块地址空间的
指针的大小在32位平台是4个字节,在64位平台是8个字节
指针的大小是4或8字节,但是通过指针找到的数据的大小是由指针类型决定的
2.指针和指针类型
指针类型的第一个意义:
指针类型决定了指针在被解引用的时候访问几个字节
int*指针,解引用访问4个字节
char*指针,解引用访问1个字节
可以推广到其它类型
int*指针解引用的访问情况:
如果是int*指针,解引用访问4个字节
char*指针解引用的访问情况:
如果是char*指针,解引用访问1个字节
指针类型的第二个意义:
指针的类型决定了指针向前或者向后走一步有多大(距离)
int*指针+1向后走4个字节
char*指针+1向后走1个字节
3.野指针
概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
3.1野指针成因
1. 指针未初始化
2. 指针越界访问
3.2如何规避野指针
1. 指针初始化
2. 小心指针越界
3. 指针指向空间释放即使置NULL,0地址是无法访问的
4. 避免返回局部变量的地址
5. 指针使用之前检查有效性
祝大家520快乐!!!