zoukankan      html  css  js  c++  java
  • 指针二次理解(第三篇)如何安全的使用指针

     

    五、             如何安全的使用指针

    指针不可乱用

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

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

       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;

    }

  • 相关阅读:
    CF575A Fibonotci [线段树+矩阵快速幂]
    P3768 简单的数学题 [杜教筛,莫比乌斯反演]
    2-SAT 学习笔记
    CF776D The Door Problem [2sat]
    KD-Tree 学习笔记
    Mybatis入门笔记(2)——基于代理Dao实现CRUD
    Mybatis入门笔记(1)——基于原始dao实现CRUD
    mybatis入门看这一篇就够了
    使用JDBC程序的问题总结
    关于递归你知道多少?
  • 原文地址:https://www.cnblogs.com/zzhua/p/5940056.html
Copyright © 2011-2022 走看看