C++ 地址连续的多维数组实现

地址连续的二维数组在C语言数值计算中有重要意义,很多二维数组的算法是基于一维数组写的。另外,在序列化时或内存复制时,连续空间易于进行整块内存的操作。

 

子程序说明:

 

1- Array2D和FreeArray2D可实现地址连续的动态二维数组的地址分配和释放。

2- 作为对照,给出了地址不连续的二维数组地址分配与释放的子程序。

 

 

// 创建 n X m 的动态数组,该数组的元素地址在内存中是连续的
// n - 输入参数,数组的行数
// m - 输入参数,数组的列数
// 返回,double **,指向指针的指针,用于以二维数组的方式访问一段内存。
double **Array2D(int n,int m)
{
 // 建立数组的存储区,即在内存中分配一片连续的空间,元素个数为 n*m,
 // 返回指向double的指针。
    double *Array1D=new double[n*m];
 // 建立数组的索引区,返回指向 double *的指针(指向指针的指针),长度为 n。
    double **Array2D=new double* [n];
 // 将索引区的每个元素指向数据存储区对应元素的地址,Array2D[0] 指向 Array1D[0],
 // Array2D[1] 指向 Array1D[m],其余类推。
    for(int i=0;i<n;i++)
    {
     Array2D[i]=&Array1D[i*m];
    }
    return Array2D;
}

 

// 释放数组的空间,首先释放一维数组占用的n*m个double空间
// 再释放索引数组(指针数组)占用的n个double*空间
void FreeArray2D(double **Array2D)
{
  delete[] Array2D[0];
  delete[] Array2D;
}

 

 

// 二维数组空间分配,地址一般不连续,不是推荐的方法
double **Array2D_A(int n,int m)
{
 // 建立数组的索引区,返回指向 double *的指针(指向指针的指针),长度为 n。
    double **Array2D=new double* [n];

 // 建立数组的存储区,对于Array2D的每一个指针元素,分配m个double空间
    for(int i=0;i<n;i++)
     Array2D[i]=new double[m];
   
    return Array2D;
}

 

// 释放数组的空间,与Array2D_A配套使用

// 首先释放n个一维数组(每个占用m个double空间)
// 再释放索引数组(指针数组)占用的n个double*空间
void FreeArray2D_A(double **Array2D,int n)
{
    for(int i=0;i<n;i++)
    delete[] Array2D[i];
  delete[] Array2D;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值