一、指针是什么:
指针理解的两个要点:
1.指针是内存中一个最小单元的编号,也就是地址。
2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。
总结:
- 指针就是地址,口语中说的指针通常指的是指针变量 - 指针变量用来存放地址的变量。(存放在指针中的值都被当成地址处理) - 指针变量用来存放地址的变量,地址是唯一标示一个内存单元的 - 一个小的单元多大?如何编址? 对于32位的机器,假设有32根地址线那么假设没根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是(1或者0)就会有 2的32次方个地址;每个地址标识一个字节 ....... 4G的空间进行编址。二、指针和指针类型
- 不同类型的指针变量在32位平台下是4个字节 - 不同类型的指针变量在64位平台下是8个字节三.指针类型的意义
- 1.指针类型可以决定指针解引用的时候访问多少个字节(指针的权限)
int * 的指针解引用 与 char * 的指针解引用
整形指针 +1 跳过4个字节,
字符指针 +1 跳过1个字节。
+/-n 时 跳过的步长;
跳过的是 n * sizeof(type)这么多个字节
四.野指针
- 概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)
- 4.1 野指针的成因
- 1.指针未初始化
- 2.指针越界访问
-
3.指针指向的空间释放
-
4.2 如何规避野指针
-
1.指针初始化
(1).明确知道指针应该初始化为谁的地址,就直接初始化。
(2).不知道指针初始化为什么值,暂时初始化为NULL
ptr 是一个空指针,没有指向任何有效空间,这个指针不能直接使用
-
- 小心指针越界
-
- 指针指向的空间释放,及时置为空 NULL
-
- 避免返回局部变量的地址
-
- 指针使用之前检查有效性
五.指针运算
- 5.1 指针 ± 整数
例子:
- 5.2 指针 - 指针
指针 - 指针运算的前提条件是:指针和指针指向了同一块空间。
- 5.3 指针的关系运算(比大小)
地址是有大小的
指针的关系运算就是比较指针的大