C++中二维数组的动态创建与处理
2015-07-19 00:40
344 查看
C++中用new动态创建二维数组的格式一般是这样:
TYPE (*p)
= new TYPE []
;
其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*
,即是指向一个有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]
的二维数组。
下面为通过动态创建一个指针数组的方法来动态创建二维数组的方法。
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
; //这个指针数组的每个指针元素又指向一个数组。
}
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;
TYPE (*p)
= new TYPE []
;
其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*
,即是指向一个有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]
的二维数组。
下面为通过动态创建一个指针数组的方法来动态创建二维数组的方法。
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
; //这个指针数组的每个指针元素又指向一个数组。
}
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;
相关文章推荐
- C++ Primer快速入门之五:实用的模板库
- PHP,C++,Mysql
- PHP中如何通过Web执行C/C++应用程序?
- C语言中内存分配那些事儿
- c++虚函数表解析
- 转:线程池原理及创建(C++实现)
- 编写一个C++风格的程序,计算输出Fibonacci数列的前20项
- C语言的内存管理分析 栈区 代码区 堆区 静态区 常量区
- VC++代码分析
- C++ string详解
- OC学习笔记之C语言字符串处理(非指针版)
- Lowest Common Ancestor of a Binary Tree
- 【C语言】简单C编程题-同位相同的N项之和/标准输入花括号成对判断/行号行输出
- 菜鸟学习c++—实现系统权限管理功能(类的public和private应用)
- C语言的各种位运算符的操作简述
- 【C语言】使用递归的整数输出(高位到低位)/输出一个菱形(能够确定行数)
- C语言中的转义符'\d', '\n'相关
- LeetCode-Add and Search Word - Data structure design(C++)
- OC学习之C语言递归方式实现10进制转R(2-16)进制
- C++中修改由const修饰的私有属性