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;
C++中二维数组的动态创建与处理的更多相关文章
- C语言中二维数组如何申请动态分配内存
C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc. ...
- C++中二维数组的动态分配
C++中二维数组的动态分配 作者: 来源:csdn博客 公布者:admin 时间:2009-04-23 13:55:03 点击:115 C++中一维数组的动态分配十分经常使用,但C++刚開 ...
- [语法]C语言中二维数组做输入参数
C语言中二维数组做输入参数时, 可以同时指定各维长度, 可以只指定第二维的长度, 不可以只指定第一维的长度, 不可以各维长度都不指定. 一句话总结:要指定至少指定第二维,都不指定是不行的. 具体栗子如 ...
- Python中二维数组的创建
习惯了java的Matrix = [][]不知道python怎么创二维数组. 先看 python中的二维数组操作 对最后提出的二维数组创建方式存在疑问 Matrix = [([0] * 3) for ...
- js中二维数组的初始化
在编程过程中,很多情况下(涉及到坐标.层级操作)我们都会用到二维数组,下面介绍介绍几种二维数组初始化的方法: 方法一.直接定义并且初始化,这种情况适用于数量和值已知的数组: var arr=[[&qu ...
- C++二维数组的动态声明
int **a = new int* [m] //分配一个指针数组,将其首地址保存在a中 . for(int i = 0; i < m; i++) //为指针数组的每个元素分配一 ...
- JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 Stri ...
- 关于Delphi中二维数组的声明和大小调整(对非基本类型数据,小心内存泄漏)
这是一个实例: procedure TMainForm.Button1Click(Sender: TObject);var arr:array of array of string;begin s ...
- php中二维数组如何使用
最近需要使用PHP中的二维数组,就用一个简单的例子来说明PHP中二数组是如何使用 <?php $a=array('a','b','c'); $c=array('a1','b1','c1'); $ ...
随机推荐
- 【转】如何高效利用GitHub——2013-08-28 22
http://www.yangzhiping.com/tech/github.html 正是Github,让社会化编程成为现实.本文尝试谈谈GitHub的文化.技巧与影响. Q1:GitHub是什么 ...
- jQuery动态实现title的修改 失效问题
最近做了一个网站,一切都很顺利,在上线的时候,突然发现一个严重的问题,开始面对这个问题,完全不知所措(在goole.火狐.IE9及其以上都没得问题:IE8及其低版本都失效)只是浏览器弹出一个bug,但 ...
- Ubuntu下配置tftp服务
Ubuntu下配置tftp服务 1.安装TFTP软件 sudo apt-get install tftp-hpa tftpd-hpa tftp-hpa是客户端,tftpd-hpa是服务器端 2.建立t ...
- 【Unicode】字符编码表信息
UTF-8有点类似于Haffman编码,它将Unicode编码为:0x00-0x7F的字符,用单个字节来表示:0x80-0x7FF的字符用两个字节表示:0x800-0xFFFF的字符用3字节表示: ...
- C#基础篇02
首先:一个完整的方法是包括两部分的,代码和注释!!!! 程序的调试: 3:设置断点: 断点之前的程序已经确保正确,可是在断点后的部分可能出现错误,所以设置完断点后,直接点击启动,然后按F11逐步棸的 ...
- c语言,strcspn,在串中查找第一个给定字符集内容的段
函数名: strcspn 功 能: 在串中查找第一个给定字符集内容的段 用 法: int strcspn(char *str1, char *str2); 程序例: #include <stdi ...
- Java 并发——多线程基础
Thead类与Runnable接口 Java的线程,即一个Thread实例. Java的线程执行过程有两种实现方式: 子类继承Thread类,并且重写void run()方法. 自定义类实现Runna ...
- windows下使用redis,Redis入门使用,Redis基础命令
windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...
- SQL Server数据的导入导出
SQL Server 2008的导入导出服务可以实现不同类型的数据库系统的数据转换.为了让用户可以更直观的使用导入导出服务,微软提供了导入导出向导.导入和导出向导提供了一种从源向目标复制数据的最简便的 ...
- wap上传图片跨域发送post请求
wap和接口交互是跨域请求,一般只能通过Jsonp来进行数据的吞吐,然而jsonp只是GET请求,不能发送post请求,所以会对项目需求有所限制. 需求:wap跨域通过接口上传图片. 条件:接口是C# ...