指针是什么?
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值,由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此,将地址形象化的称为 指针。意思是通过它能找到以它为地址的内存单元
指针就是变量,用来存放地址的变量。(存放在指针中的值都被当做地址处理)
指针的大小在32位平台是 4 个字节,在64位平台是 8 个字节
指针和指针类型
指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。
比如:char* 的指针解引用就只能访问一个字节,而 int* 的指针解引用就能访问四个字节
野指针
野指针就是指针指向的位置是不可知的(随机的、不正确的,没有明确限制的)
野指针成因:
- 指针未初始化(随机值)
- 指针越界访问
- 指针指向的空间释放
如何规避野指针:
- 指针初始化
- 小心指针越界
- 指针指向空间释放即使之置NULL
- 指针使用之前检查有效性
指针运算
- 指针 + - 整数
- 指针 - 指针
- 指针的关系运算
指针 + - 整数
指针的类型决定了指针向前或向后走一步有多大
比如:char* pc; pc+1代表,地址往后移 1 个字节,int* p;p+1代表地址往后移四个字节
指针 - 指针(同一块空间)
得到的是中间的元素个数
指针的关系运算(比较大小)
指针与数组
用指针访问数组
int arr[ ]
int* p=arr;
二级指针
int a=10;
int* pa=&a; //pa一级指针
int** ppa=&pa; //ppa二级指针 存放的是pa的地址
**ppa
指针数组(本质是数组)
存放指针的数组
int* arr[] / *arr[]