C++中二维数组的动态创建与处理
来源:互联网 发布:怎么翻译韩语软件 编辑:程序博客网 时间:2024/06/05 10:42
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 (int i=0;i<m;i++) { free(data[i]); //先撤销指针元素所指向的数组 } free(data);
C++版本:
double **data;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 (int i=0;i<m;i++){ delete[] data[i]; //先撤销指针元素所指向的数组} delete[] data;
这种方法是通过先动态创建一个指针数组,然后为指针数组的每个元素再动态指向一个数组的办法来完成的。
其创建过程与销毁过程同样重要。
在销毁的过程,先销毁指针数组每个元素指向的数组,然后再销毁这个指针数组。
0 0
- C++中二维数组的动态创建与处理
- C++中二维数组的动态创建与处理
- C++中二维数组的动态创建于处理(zzl
- C语言中动态二维数组的创建
- C语言中动态二维数组的创建
- 【C++】动态二维数组的创建
- C语言中二维数组的动态申请与释放
- C语言中二维数组的动态申请与释放
- c中动态与静态二维数组
- C++中二维动态数组的创建
- C中动态二维数组的获取
- C中动态二维数组的生成
- c/c++ 动态创建与释放二维数组
- C语言二维数组动态创建与释放
- 二维数组的动态创建
- 二维数组的动态创建
- 二维数组的动态创建
- 二维动态数组的创建
- iOS7兼容自定义带动画的AlertViewController
- js如何实现广告在pc端显示,移动端不显示.直让广告在点上是显示,手机上不显示代码
- 【转载】MarkDown 图片大小问题
- java中使用POI(HSSF)导出excel表格
- 每天一条linux命令 ---cat命令
- C++中二维数组的动态创建与处理
- 【转载】CSDN-markdown编辑器语法——字体、字号与颜色
- 基于SonarQube实现代码扫描的团队定制
- 学习Google Sample 如何给TextView增加超链接
- UVM中的regmodel建模(一)
- grep命令总结
- ios解决有关null闪退及json解析数据中null的问题
- 在VS中添加.dll文件
- 【mysql】linux下启动mysql服务报错: Another MySQL daemon already running with the same unix socket.