您的位置:首页 > 编程语言 > C语言/C++

c/c++ 多维数组的动态分配

2017-10-05 03:39 260 查看
我们知道在c或者c++里面,基本数组的定义必须是常数才可以。动态分配内存没法直接了当。

在c++ 里可以vector来动态分配,

例如:

vector<vector<int>> dp(n + 1, vector<int>(W + 1));


但是更基本的做法是指针来new,

一维数组:

1 int *array1D;
2 //假定数组长度为m
3 //动态分配空间
4 array1D = new int [m];
5 //释放
6 delete [] array1D;


二维数组:

int **array2D;
//假定数组第一维长度为m, 第二维长度为n
//动态分配空间
array2D = new int *[m];
for( int i=0; i<m; i++ )
{
array2D[i] = new int
;
}
//释放
for( int i=0; i<m; i++ )
{
delete [] arrar2D[i];
}
delete array2D;


P.S. 事实上二维数组空间的释放还可以更简单地用:delete [] array2D;

三维数组;

int ***array3D;
//假定数组第一维为m, 第二维为n, 第三维为h
//动态分配空间
array3D = new int **[m];
for( int i=0; i<m; i++ )
{
array3D[i] = new int *
;
for( int j=0; j<n; j++ )
{
array3D[i][j] = new int [h];
}
}
//释放
for( int i=0; i<m; i++ )
{
for( int j=0; j<n; j++ )
{
delete array3D[i][j];
}
delete array3D[i];
}
delete array3D;


c语言malloc 版本:

#include<malloc.h>
int **a=(int **)malloc(m*sizeof(int *));
for(int i=0;i<m;i++)
a[i]=(int *)malloc(n*sizeof(int));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: