指针
概念:指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址
搞清一个指针只需要知道四个方面
1.指针的类型 //指针声明语句里的指针名字去掉,剩下的部分就 是这个指针的类型。
2.指针所指向的类型 //指针名字和名字左边的指针声明符 *去掉,剩下的就是指针所指向的类型
3.指针的值(指针所指向的内存区)
4.指针本身所占据的内存区。 //32位平台里,指针本身占据了4个字节的长度
一些细节如下:
指针分 指向的内存空间 和 对应的内存空间
如int num =5;
int *p=#
*p :根据p对应内存空间里保存的地址找到其对应的内存空间
num++:对num对应的内存空间的值加1
p++:对p对应的内存空间的值加1(步长)。
等式:p==&num,*p==num==*(&num)
//指针与数组将在后篇具体分析
野指针
1.野指针:随机指向一块内存的指针,导致内存泄漏(指向一块已释放的内存,或没有访问权限的内存)
2.成因:
①指针变量未初始化
指针刚创建未初始化,它的缺省值是随机的
②指针释放之后未置空
指针在free或delete时只是释放内存空间,指针本身还在
③超出变量作用域
3.避免野指针
①给指针变量赋初值
A. char * p=(char * )malloc(sizeof(char)) malloc分配完,最好检验是否分配成功
检验: if(NULL = p)
{
printf("malloc error!\n");
exit(1);
}
分配完空间,避免分配刚释放的空间,需清空
可使用函数 memset,bzero
B. char * p =NULL
NULL相当于宏,#define NULL (void *)0 0地址不允许操作,访问 当不知道指针指向时,置空。
②释放时置NULL
free(p);
p=NULL;