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
;

时间: 2024-10-11 11:51:42

C++中二维数组的动态创建与处理的相关文章

C语言中二维数组如何申请动态分配内存

C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc.h> int main() { int **a; int i, j; a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行 for (i = 0; i < 3; ++i){//为每列分配4个大小空间 a[i] = (int*)malloc(sizeof(int

C++中二维数组的动态分配

作者:   来源:csdn博客   公布者:admin 时间:2009-04-23 13:55:03   点击:115 C++中一维数组的动态分配十分经常使用,但C++刚開始学习的人可能非常少想过要使用动态分配的二维数组,或者自觉得二维数组就是这样分配的(至少我自己開始的时候就这样觉得):int m=2, n=3; int** array2D=new int[m][n];.这全然是我们写多了像int n=4; int* array=new int[n];这种语句留下的后遗症,纯粹是由于惯性太大刹

php中二维数组排序问题方法详解

合肥开源IT教育分享一篇<php中二维数组排序问题方法详解>的文章希望能够帮助在学习php的新手们,如果还有什么不懂的问题 可以关注我们的官方网站:www.kyitjy.com  豪华的名师团队,多位技术专家授课,多位核心研发工程师研发授课. PHP中二维数组排序,可以使用PHP内置函数uasort() 示例一: 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示回调函数的第一个参数在前,第二个参数在后排列 $per

js中二维数组篇

QQ:1187362408 欢迎技术交流和学习 js中二维数组篇(二维数组篇): TODO: 1,一位数组声明并初始化如下: <span style="color:#000000;">var chkProQuery = new Array("ddlPro", "ddlCity", "ddlCoun", "ddlTown", "ddlVill", "ddlGird&q

关于C语言中二维数组传参————————【Badboy】

直接上代码: #include void Fun(int *a[],int m,int n)// { printf("%d\t",*a);//[0][0] /* int e[2][2][2]={8,7,6,5,4,3,2,1}; int *f,***g; g=e; f=e;//有警告,但不会报错 printf("%d\n",*f); */ } /*解释: Fun()中的int *a[2]表示定义指针数组a[2],a[0],a[1]存储的都是指针, a表示的是数组的首

C++中二维数组传参的方法详解

C++中二维数组传参的方法详解 首先需要明确,C++中其实没有多维数组,所谓的多维数组,其实就是数组的数组: 另外,数组中元素的个数也是数组类型的一部分. 当一个数组的元素仍然是数组时,通常使用2个维度来定义它,一个数组表示数组本身的大小,另一个维度表示其元素大小(它的元素也是数组): int ia[3][4]; //大小为3的数组,每个元素是含有4个整数的数组 int (*p)[4] = ia;//p指向含有4个整数的数组(指向第一个内层数组) 1 将给定第二维长度的二维数组作为形参传递 #i

js中二维数组的初始化

在编程过程中,很多情况下(涉及到坐标.层级操作)我们都会用到二维数组,下面介绍介绍几种二维数组初始化的方法: 方法一.直接定义并且初始化,这种情况适用于数量和值已知的数组: var arr=[["0-1","0-2"],["1-1","1-2"],["2-1","2-2"]]; 方法二.动态创建并初始化: var arr=new Array(); //声明一维数组 for(var x=0

C++二维数组的动态声明

int **a  =  new int* [m]   //分配一个指针数组,将其首地址保存在a中   . for(int i = 0; i < m; i++)   //为指针数组的每个元素分配一个数组 a[i] = new int [n]; 相当于产生了一个二维数组 a[m][n]了 静态声明的数组可以有公式(假设也是m行n列) b[i][j] = b[i*n +j] 这是因为数组b是连续的一片内存,而动态声明的数组任意的a[k]都是一个int*类型,即一个地址,所以只能a[i][j]或者*(*

JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组

1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 String[] str2; 静态初始化:初始化和赋值同时进行 String[] str = new String[]{“aa”,”bb”} String[] str2 = {“aa”,”bb”} //声明和初始化不可以分开 动态初始化:初始化和赋值分开进行 String[] str = new String[5];//5代表是数组的长度 说明: 无论是静态初始化还是动态初始化,数组一旦创建成功,数组