zoukankan      html  css  js  c++  java
  • C++中二维数组的动态创建与处理

    C++中用new动态创建二维数组的格式一般是这样:

    TYPE (*p)[N] = new TYPE [][N];

    其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针。

    还有一种方法,可以不指定数组的列数:

    int **p;
    p = new int*[10];    //注意,int*[10]表示一个有10个元素的指针数组
    for (int i = 0; i != 10; ++i)
    {
        p[i] = new int[5];
    }

    这里是将p作为一个指向指针的指针,它指向一个包含10个元素的指针数组,并且每个元素指向一个有5个元素的数组,这样就构建了一个10行5列的数组。


    当数组使用完毕,释放空间的代码是:

    for(int i = 0; i != 5; i++)
    {
        delete[] p[i];
    }
     delete[] p;

    处理二维数组,可以用降维或是二维法。
    降维法是用一位数组来接受二维数组,将二维元素的首地址&a[0][0]作为参数,传递给函数,函数用int *接受。
    二维法就直接用二维数组来接受,但是需要指定列数。

    如要想创建一个[m][n]的二维数组。

    下面为通过动态创建一个指针数组的方法来动态创建二维数组的方法。

    C版本:

     double **data;

     data = (double **)malloc(m*sizeof(double *));
     for(int j=0;j<m;j++)
     {
      data[j] = (double*)malloc(n*sizeof(double));
      //这个指针数组的每个指针元素又指向一个数组。
     }
     
     for (int i=0;i<m;i++)
     {
      for (int j=0;j<n;j++)
      {
       data[i][j]=i*n+j;//初始化数组元素
      }
     }

     for (i=0;i<m;i++)
     {
      free(data[i]);
     //先撤销指针元素所指向的数组
     }              
     free(data);

    C++版本:

    double **data;

    data = new double*[m]; //设置行 或直接double **data=new double*[m]; 一个指针指向一个指针数组。

    for(int j=0;j<m;j++)
    {

    data[j] = new double[n];        //这个指针数组的每个指针元素又指向一个数组。
    }

    for (int i=0;i<m;i++)

    {
       for (int j=0;j<n;j++)
       {
        data[i][j]=i*n+j;//初始化数组元素
       }

    }

    for (i=0;i<m;i++)
    {
     delete[] data[i]; //先撤销指针元素所指向的数组
    }                     
    delete[] data

  • 相关阅读:
    计算机网络 概述
    ISO/ISO 参考模型 和 TCP/IP模型
    Elasticsearch 6.2.3版本 执行聚合报错 Fielddata is disabled on text fields by default
    Elasticsearch 6.2.3版本 filtered 报错问题 no [query] registered for [filtered]
    Elasticsearch 6.2.3版本 Windows环境 简单操作
    MyBatis 模糊查询
    常用正则表达式
    页面加载时的div动画
    Highcharts的一些属性
    highcharts去掉x轴,y轴,轴线以及刻度
  • 原文地址:https://www.cnblogs.com/Zengineer/p/4657962.html
Copyright © 2011-2022 走看看