zoukankan      html  css  js  c++  java
  • 指针 && 动态内存分配

    C++中的动态内存分配机制

    c++中使用new和delete来完成在堆上对动态内存的分配和释放。

    注.所有指针都应该被初始化

      如果指针指向的动态内存被释放或没有指向合法的地址,就应该将指针设置为nullptr,否则内存泄漏

    变量:

      double* pvalue {};

      pvalue=new double;

      *pvalue=9.0;

      或

      double* pvalue {};

      pvalue=new double {9.0};

      或合并为一句

      double* pvalue {new double{9.0}};

      delete pvalue;

    数组:

      char* pstr {new char[20]};

      delete [] pstr;

      pstr = nullptr;

      可以顺便初始化:int *data {new int [10] {2,3,4}};

    多维数组:

      double (*pbeans)[4] {};

      pbeans= new double [3][4];

      或合为一步:double (*pbeans)[4] {new double [3][4]};

      delete [] pbeans;

      pbeans = nullptr;

    C语言中的动态内存分配机制

      malloc:

        double *ptd;

        ptd = (double *)malloc( N * sizeof(double));

        free(ptd);

        请求N个double类型的空间

      calloc:

        long *newmem;

        newmem =(long *)calloc( N,sizeof(long));

        第一个参数是所需内存单元的数量,第二个参数是每个单元以字节计的大小。calloc将块中全部位都置0。

      变长数组(VLA)中的动态内存分配:

        int n=5;

        int m=6;

          int ar[n][m];  //变长数组

          int (*p1)[6];

          int (*p2)[m];  //变长数组

        p1=(int (*)[6])malloc( n *6 *sizeof(int));

        p2=(int (*)[m])malloc( n *m *sizeof(int));  //变长数组

    注:在数组传递作为参数传递过程中必须指定列

      如:double (int ar[][6]);

  • 相关阅读:
    Maven最全指南,看了必懂(转载)
    MySQL:数据库优化
    关于 MyBatis 10 种通用的写法
    Redis 性能问题分析(转载)
    前端对于服务端渲染(SSR)的理解
    JS 中的编码和解码(encode和decode)
    SEO、SPA、SSR的区别关系详解
    VUE 项目路由的两种模式(hash、history)
    Chrome和IE浏览器的渲染过程区别
    对于前端缓存的理解(缓存机制和缓存类型)
  • 原文地址:https://www.cnblogs.com/yunqie/p/5890045.html
Copyright © 2011-2022 走看看