指针不可以乱用,安全的使用指针,需要对指针有足够清楚的认识。
在使用指针之前,一定要弄清楚两个问题:
1、这个指针指向了哪儿?
2、这个指针指向的那个地方是否有效?(是否能够访问)
就目前来说指针只允许指向两个地方:
1、指向变量、数组
2、指向NULL(0)。空指针可以判断,野指针无法判断。
当一个指针未赋值时,其值为随机值,此时指向了一个随机的内存地址,称为“野指针” wild pointer·
#include <stdio.h>
int main()
{
int* p=0;
if(p)
{
printf("%d \n",*p);
}
return 0;
}
实际工程空指针的另外一个应用是可以不传入输入函数。
#include <stdio.h>
void max_min(const int* arr,int len,int* pmax,int* pmin)
{
int _max=0;
int _min=0;
const int* p=arr;
if(pmax)
{
for(int i=0;i<len;i++)
{
if(p[i]>_max)
{
_max=p[i];
}
}
*pmax=_max;
}
if(pmin)
{
for(int i=0;i<len;i++)
{
if(p[i]<_min)
{
_min=p[i];
}
}
*pmin=_min;
}
}
int main()
{
int arr[6]={6,4,5,3,1,2};
int max=0;
int min=0;
max_min(arr,6,&max,0);
printf("max=%d\n",max);
max_min(arr,6,0,&min);
printf("min=%d\n",min);
return 0;
}
1、杜绝野指针。
传递空指针:函数内部是有办法处理,判断一下就行。
传递野指针:函数内部无法处理,无法判断是否为野指针。
2、严禁数组越界。
3、变量是否有效???失效????指针指向的地方是否失效???