指针的概念:
1、指针就是变量,用来存放地址,地址唯一标识一块内存空间。(存放在指针中的值都被当成地址处理)
2、指针的大小是固定的4、8个字节。
3、指针是有类型的,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限
指针的步长
指针的类型决定了指针进行解引用操作时,能够访问空间的大小。
int* p;*p 能够访问4个字节
char* p;*p 能够访问1个字节
double* p;*p 能够访问8个字节
野指针
概念:野指针就是指针指向的位置是不可知的(随机的,不确定的,没有明确限制的)
野指针的成因
1、指针未初始化
2、指针越界访问
指针指向数组的元素,当指针指向的范围超出数组的范围时,p就称为野指针。
3、指针指向的内存空间释放
指针减指针
指针减指针得到的是 指针和指针之间元素的个数。
标准规定:
允许指向数组元素的指针 与 指向数组最后一个元素 后面的指针 的那个内存位置的指针作比较,但是不允许与指向第一个元素之前的那个内存位置 的指针作比较。
脚下留心
1、&arr - &数组名 - 数组名不是首元素的地址 - 数组名表示整个数组 - &数组名 取出的是整个数组的地址。
2、sizeof (arr) - sizeof (数组名) - 数组名表示的整个数组 - sizeof (数组名) 计算的是整个数组的大小。
初始化指针
二级指针
int * pa ;*pa 表示 pa是个指针,而前面的 int 则表示 该指针指向的类型为int类型
int* *ppa;*ppa表 示 ppa是个指针,而前面的 int* 则表示 该指针指向的类型为 int* 类型