五、 如何安全的使用指针
指针不可乱用
安全的使用指针需要对指针有足够清楚的认识
使用指针之前,一定要弄清楚两个问题:
1.这个指针指向了哪里?
指针只允许指向两个地方
1) 指向了变量、数组
代码走起
int n;
int* p = &n; //p指向的内存:一个变量
int arr[4];
int* p2 = arr; //p指向的内存:一个数组
2) 指向0
代码走起
int* p = 0; //空指针
当一个指针未赋值时,其值为随机值,此时值指向了一个随机的内存地址。称为“野指针”(wild pointer)
2.空指针
值为0的指针,为空指针
int* p = 0;
当指针为空时,不能使用星号操作。
int* p = 0;
printf( "%d \n" , *p ); //错误 崩溃
但空指针是一种可以接受的情况,只需要加一个if判断就能解决,
if( p )
{
printf( "%d \n" , *p );
}
3.严防数组越界
当指针指向数组时,要注意不要越界访问
代码走起
int arr[4];
int* p =arr;
p += 4;
*p = 12; //已经越界,但不易察觉
4.指向的变量是否已经失效
如果指向的目标的生命期已经终结(失效),则指针也失效
代码走起
int main()
{
int* p = 0;
if(1)
{
int* p = 10; //a生效
p = &a; //p指向a
}
*p = 11; //p指向了一个无效的位置 错误
return 0;
}