二维数组动态分配总结
来源:互联网 发布:c语言中memcpy 编辑:程序博客网 时间:2024/04/29 06:14
今天老师布置了一道矩阵转置,果然啊,耍了一个暑假都忘得差不多了,还是古语说得好:“好记性不如烂笔头”;废话不多说了,小白要开始总结了。
方法一:数组空间不连续,两次调用malloc
int ** array_1(int row, int col){ int i; int **p; p =(int **) malloc(row * sizeof(int *)); if (p == NULL) return NULL; for (i = 0; i < row; i++) p[i] =(int*) malloc(sizeof(int) * col); return p;}方法二:数组空间连续,且只调用malloc一次,相对方法一效率要高
int ** array_2(int row, int col){ int i; int *p, **pp; p = (int*)malloc(row * col * sizeof(int)); pp = (int**)malloc(row * sizeof(int *)); if (p == NULL || pp == NULL) return NULL; //pp = &p; for (i = 0; i < row; i++) pp[i] = p + col * i; return pp;}ps:一开始程序里有pp=&p的时候,程序一直报错。后来在论坛请教后才知道,此时的pp已经不再指向原本分配的空间了。。。。。。
注意:
if (p == NULL || pp == NULL)//应该分开判断,当p分配成功而pp分配失败时,应该free(p),避免内存泄漏
方法三(分配连续内存,列确定):
#include<stdio.h>#include<stdlib.h>int main(){const int MAXCOL=3;int nRow;printf("请输入二维数组的行数(列固定为%d):",MAXCOL);scanf("%d",&nRow);int *p=new int[nRow*MAXCOL];//连续内存int (*pp)[MAXCOL]=(int(*)[MAXCOL])p;//将p转换为二维数组,int(*pp)[MAXCOL]为p分配空间int i,j;for(i=0;i<nRow;i++){for(j=0;j<MAXCOL;j++){pp[i][j]=i+j;}}for(i=0;i<nRow;i++){for(j=0;j<MAXCOL;j++){printf("%5d",pp[i][j]);}putchar('\n');}delete [] p;//在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。system("pause");return 0;}
1 0
- 二维数组动态分配总结
- 动态分配二维数组
- 动态分配二维数组
- 如何动态分配二维数组
- 动态分配二维数组
- 动态分配二维数组
- 动态分配二维数组
- 二维数组动态分配
- 动态分配二维数组
- 动态分配二维数组
- 动态分配二维数组
- 动态分配二维数组
- 二维数组动态分配内存
- 二维数组的动态分配
- 二维数组动态分配
- 动态分配二维数组
- 动态分配二维数组
- C++动态分配二维数组
- C++运算符重载总结
- C Primer Plus学习 五十三 文件包含:#include
- linux磁盘空间查看命令剩余空间查看
- 动态内存管理allocator类
- 表单注册(html+css+jsp)
- 二维数组动态分配总结
- javafx 实现提示条位置 自动隐藏
- i标签通过css写出一个向下的箭头
- VS或VC调用matlab程序
- HDU 2516 取石子游戏(斐波那契博弈)
- java类修饰符
- Hadoop 执行 start-dfs.sh Error: JAVA_HOME is not set and could not be found
- 给大家安利一个学习angular2的视频网站
- http enter以后发生了什么?