指针二次理解(第三篇)如何安全的使用指针

 

五、             如何安全的使用指针

指针不可乱用

安全的使用指针需要对指针有足够清楚的认识

使用指针之前,一定要弄清楚两个问题:

   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        " , *p );          //错误 崩溃

但空指针是一种可以接受的情况,只需要加一个if判断就能解决,

if( p )

{

         printf( "%d        " , *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;

}

原文地址:https://www.cnblogs.com/zzhua/p/5940056.html