目录
一.什么是指针
指针理解的2个要点: 1. 指针是内存中一个最小单元的编号 也就是地址
2. 平时口语中说的指针 通常指的是指针变量 是用来存放内存地址的变量
总结:指针就是地址 口语中说的指针通常指的是指针变量
指针变量:
我们可以通过&(取地址操作符)取出变量的内存其实地址 把地址可以存放到一个变量中 这变量就是指针变量
指针变量是存放地址的 地址是唯一标示一个内存单位的
指针的大小在32位平台是4个字节 在64位平台上是8个字节
二.指针和指针类型
只要是变量都是有类型的 指针也不例外
1.指针+-整数
总结:指针的类型决定了指针向前或者向后走一步有多大(距离)
2.指针的解引用
指针的类型决定了对指针解引用的时候有多大的权限(能操作几个字节) 比如: char* 的指针解引用就只能访问一个字节 而 int* 的指针的解引用就能访问四个字节
三.野指针
概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
1.野指针成因
a.指针未初始化
b.指针越界访问
c.指针指向的空间释放
这里放在动态内存开辟的时候讲解
2.如何规避野指针
a.指针初始化
b.小心指针越界
c. 避免返回局部变量的地址
d. 指针指向空间释放,及时置NULL
e.指针使用之前检查有效性
四.指针运算
a.指针+-整数
b.指针-指针
表示的即是两者之间的距离!
c.指针的关系运算
标准规定: 允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较 但是不允许与指向第一个元素之前的那个内存位置的指针进行比较
五.指针和数组
数组名就是首元素的地址 (两种情况除外)
既然可以把数组名当成地址存放到一个指针中 我们使用指针来访问一个就成为可能
int *p = arr
六.二级指针
指针变量也是变量 是变量就有地址 那指针变量的地址存放在哪里呢------二级指针
解引用是一个降级武器 比如二级指针解引用为一级指针-“地址” 然后再次解引用 就得到的地址所指向的“数”
七.指针数组
关于指针数组 其实就是一个数组 里 的元素都是指针即就是存放指针的数组
同样也有数组指针 即是一个指向数组的指针 也就是存放数组地址的指针!