重点:
1、指针是什么?
2、指针和指针类型
3、野指针
4、指针运算
5、指针与数组
6、二级指针
7、指针数组
一、指针是什么?
它是编程语言的一个对象,指的是地址,可通过其找到对应的内存储存单元。
(存放地址的变量叫指针变量,指针是变量,存放的是地址)
(一个内存单元是一个字节,32的平台上一个地址是4个字节,所以一个指针大小是4个字节,64的平台上是8个字节)
二、指针和指针类型?
指针大小都是4或者8个字节,为什么还要有类型呢?
首先我们要明白:
int* p,*p可以访问4个字节
char* p,*p可以访问1个字节
double*p,*p可以访问8个字节
所以指针类型决定了指针向前或者向后走一步的距离。
这又是什么意思呢?这就要谈到指针和整数的加减了。
打印结果,pc+1则在原来的地址上加1个字节,而pi+1则是加4个字节,指针的类型的意义便是如此。
三、野指针
首先明白什么情况会出现野指针?
1、局部(指针)变量未初始化的时候,就会产生随机值。
2、越界访问
3、指针指向的空间释放(可能发生在局部变量中)
那么如何避免野指针呢?
1、初始化(不知道地址初始化什么的时候,直接初始化为int* p=NULL;明确知道初始化的时候:int a=10;int* p=&a)
2、小心越界(本身不会检查越界)
3、指针指向空间释放(置NULL)
4、使用前检查有效性
四、指针的运算
指针+-整数
指针-指针
指针的关系运算
五、指针和数组
数组名是第一个元素的地址,即它的指针;
(详情见代码)
六、二级指针
同理还有三级指针
七、指针数组
本质就是数组
int arr[10]整型数组存放的是整形的数组
char ch[5]存放字符的数组叫字符数组
int *parr[5] 整形指针的数组
char * pch[5]字符指针的数组