指针是什么
1.指针是内存中一个最小单元的编号,也就是地址
2.口语中说的指针是指针变量
单元编号 == 地址 == C语言中的指针
指针变量,用来存放地址的变量(指针变量中的值都会当作地址来处理)。
32位的机器——有32根地址线。
这样就有2的32次方个地址
每一个地址表示一个字节,通过计算可知会对4GB个空间进行编号
1.内存被划分成一个个的内存单元,每个内存单元的大小是1个字节
2.每个自己的内存单元都有一个编号,这个编号就是地址,地址在C语言中称为指针
3.地址要存储的话,存放在指针变量中
4.每个内存单元都有一个唯一的地址来标识
5.在32位机器上地址大小是4个字节,所以指针变量的大小也是4个字节
同理:在在64位机器上地址大小是8个字节,所以指针变量的大小也是8个字节
指针和指针类型
指针的解引用操作
指针类型决定了指针进行解引用操作的时候,访问几个字节
指针类型决定了指针+1 / -1 跳过几个字节
int*//跳过4个字节
野指针
定义:指针指向的位置是不确定的
成因
1.指针未初始化。例:
2.指针越界{超出了函数的范围)例:
3.指针指向的空间被释放了。例:
如何规避野指针
1.指针初始化
如果明确指针指向应该指向哪里,就初始化正确的地址
int a = 10;
int *p = &a;
如果不知道初始化什么值,为了安全,初始化NULL
int *p = NULL
2.小心指针越界
3.指针指向空间释放,及时置NULL
4.避免返回局部变量的地址
5.在使用前检查指针的有效性