目录
1.定义
2.指针和指针类型
2.1指针+-整数
2.2指针的解引用
3.野指针
3.1野指针成因
3.2如何规避野指针
4.指针运算
4.1指针+-整数
4.2指针-指针
4.3指针的关系运算(即比较大小)
5.指针和数组
6.二级指针
7.指针数组
1.定义
- 内存中一个最小单元的编号,即地址
- 平时说的指针,通常是指指针变量,是用来存放内存地址的变量
经过仔细计算和权衡,发现一个字节给一个对应的地址是比较合适的
对于32位的机器,32根地址线产生的地址就作为指针变量的大小,表示可以表示2^32个字节内存大小,64位机器同理,因此,在x86的系统环境下,地址就得用4个字节存储,x64则8个字节
2.指针和指针类型
指针类型包括char*,int*,short*,float*,double*
区别:
- 若某个指针是char*的,则+1后是向后走一个字节,而int*类型指针变量+1会向后移动4个字节(x86)
- float*和int*也不相同,不能混用
- 虽然指针变量都占4个字节,但两个不同类型指针相互赋值时会发生强制类型转换
2.1指针+-整数
指针类型决定指针向前或向后走一步有多大(距离)
2.2指针的解引用
指针类型决定了对指针解引用的时候有多大权限,(能操作几个字节)
3.野指针
定义:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)
3.1野指针成因
- 指针未初始化
- 指针越界访问
- 指针指向的空间释放(比如调用自定义函数返回地址,但函数调用完成之后内存就释放了)
3.2如何规避野指针
- 指针初始化(若不清楚先置为NULL)
- 小心指针越界
- 指针指向的空间释放及时置NULL
- 避免返回局部变量的地址
- 指针使用之前检查有效性(if(p != NULL))
4.指针运算
4.1指针+-整数
4.2指针-指针
二者相减结果是指针和指针之间元素的个数,此运算只适用于指向同一块空间的两个指针,否则没有意义
4.3指针的关系运算(即比较大小)
需注意:标准规定,允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较
5.指针和数组
联系:可以通过指针来访问数组、
6.二级指针
作用:存储一级指针变量的地址(例:int** ppa)
二级指针作为指针,大小同样是四个字节,如果+1,会跳过四个字节(不论是什么类型的二级指针)
7.指针数组
定义:存放指针的数组(例:int* parr[10])
|