• 指针和动态存储分配


    动态存储分配

    程序在运行时需要申请存储空间,用来存放信息,但在编程阶段,我们并不知道程序运行的时候需要多大的空间,也不想事先预留一块非常大的区域,因为其中很多空间也许根本不会用得到。针对这个问题,C语言提供了一套机制可以在程序运行时分配存储空间,这块区域成为系统堆(heap)。可以调用malloc函数申请所需大小的一块内存空间。如果当前系统存在空内存,则函数malloc返回指向这块内存起始地址的指针,反之,则返回指针NULL。如果不再用这块存储空间时要记得free释放掉,交还给系统

    int i,*pi;
    float f,*pf;
    pi=(int *)malloc(sizeof(int));
    pf=(float *)malloc(sizeof(float));
    * pi=1024;
    * pf=3.14;
    printf("an_integer=%d,a_float=%f
    ",* pi,* pf);
    free(pi);
    free(pf);

    如果存储空间不足,调用malloc会使申请失败,用一下代码替换上述malloc相应代码

    if((pi=(int *)malloc(sizeof(int)))==NULL) || (pf=(float *)malloc(sizeof(float)))==NULL){
      fprintf(stderr,"Insufficient_memory");
      exit(EXIT_PAILURE);
    }

     或者使用以下等价的代码

    if(!(pi=(int *)malloc(sizeof(int))) || !(pf=(float *)malloc(sizeof(float)))){
      fprintf(stderr,"Insufficient_memory");
      exit(EXIT_FAILURE);
    
    }

    经常使用malloc的话,可以定义宏语句,如下

    #define MALLOC(p,s)
      if(!(p)=malloc(s))){
              fprintf(stdeerr,"Insufficient_memory");
              exit(EXIT_FAILURE);
    }

    则可以直接调用了

    MALLOC(pi,sizeof(int));
    MALLOC(pf,sizeof(float));

    指针隐患

    C程序中让所有尚未指向实际目标的指针都取NULL值,可以尽量避免访问一块尚未申请的空间,或访问一块我们并无权访问的空间。有些计算机在涉及空指针操作时,返回NULL,能够接着执行,而另一些系统,将直接对地址单元0操作,引发严重错误。

    指针类型变量存放的值实际上是内存地址,&取地址操作,*去引用(间接引用)操作 

  • 相关阅读:
    Picasso
    ImageLoader
    OkHttp3源码详解(二) 整体流程
    Android事件总线(三)otto用法全解析
    硅谷新闻9--图片三级缓存
    OkHttp3源码详解(一) Request类
    网络编程总结
    名称空间(Namespaces)(转)
    文件的增删改查
    生成器表达式和面向过程编程
  • 原文地址:https://www.cnblogs.com/WFM1997/p/9617476.html
Copyright © 2020-2023  润新知