指针的概念:
指针就是变量,用来存放地址的变量(存放在指针中的值都当成地址处理),但是指针的字节长度是固定的。因为指针保存的是地址,由操作系统的位数决定,32位机的字节是4,64位机的字节是8。
指针的种类:
1.一维指针*,如:int* p; 定义了可以指向int型数据的指针变量。告诉编译器p是一个指针变量,占4个字节,需要用一个int类型的地址给它赋值。“ * ”表示间接寻址运算符,用来取地址单元p中的内容。
2.二维指针**,如:int **p表示 定义一个指针*p ,这也是p的值,值是p的地址。二级指针作为函数参数的作用:在函数外部定义一个指针p,在函数内给指针赋值,函数结束后对指针p生效,那么我们就需要二级指针。
3.指针数组与数组指针:
指针数组:指针数组首先是一个数组,然后数组的每一个元素是都是指针类型,如:例如:int *p[3]; 表示有一个有三个指针(int)类型的数组。
数组指针:指向一个数组的指针,如: 例如:int (*p)[2]; 说明了一个指向包含有2个元素的整形数组的数组指针,指针说明符" * "的优先级高,若无此圆括号,编译器将把上述说明解释成成了一个数组指针。
**4.指针函数与函数指针:**指针函数本质是一个函数,返回值是某一类型指针如:int *fun(int x,int y);
函数指针是指向函数的指针,本质是指针变量,如:int (*fun)(int x,int y);fun = &Function;
5.万能指针(void *):void * 可以表示任意一种类型的指针。
指针的用途:
存地址,游历内存,取首地址和传参:
1. 处理堆中存放的大量数据
2. 快速访问类的成员数据和函数
3. 以别名的方式向函数传递参数
**
指针作用:
通过指针来改变变量(变量的本质是某一块内存空间的别名)的值,即改变内存空间的值。
1.指针允许你以更简洁的方式引用大的数据结构。
2.指针使程序的不同部分能够共享数据。
3.利用指针,能在程序执行过程中预留新的内存空间。
4.指针可以用来记录数据项之间的关系。
来源:https://blog.csdn.net/zhanshen112/article/details/80265830?
野指针:
避免野指针的出现:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。
野指针主要是因为这些疏忽而出现的删除或申请访问受限内存区域的指针。
1.指针变量未初始化
2.指针释放后之后未置空
3.指针操作超越变量作用域
更多关于指针的参考:
https://blog.csdn.net/Last_Impression/article/details/1829377?
https://blog.csdn.net/duidaifen3896/article/details/90178564?