malloc动态分配多维数组
下面试自己写的三个测试程序,如果看懂了基本上动态分配多维数组就没什么问题啦:重点 1:深刻理解多维数组的概念,多维数组在内存中的分配情况,基本上动态分配也没什么问题的。然后还要注意一点的就是,释放是分配的逆过程!!!
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main(void)
{
int i ;
char (*p)[12] ; //[5][12]
p = malloc(5 * sizeof(char ) * 12); //申请5行的地址空间
for(i = 0 ; i < 5 ; i++)
{
strcpy(*(p + i), "hello");
}
for(i = 0 ; i < 5 ;i++)
{
printf("%s\n" , *(p + i));
}
free(p);
}
程序2:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main(void)
{
int i;
int j ;
int num = 0 ;
char **p ;//[5][12]
p =(char **) malloc( 5 * sizeof(char *) );
for(i = 0 ; i < 5 ; i++)
{
p[i] = malloc(12 * sizeof(char));
}
for(j = 0 ; j < 5 ; j++)
{
num = 0 ;
for(i = 0 ; i < 12 ; i++)
{
p[j][i] = 'a' + num;
num++ ;
}
}
for(j = 0 ; j < 5 ; j++)
{
for(i = 0 ; i < 12 ; i++)
{
printf("%c" , p[j][i]);
}
printf("\n");
}
for(i = 0 ; i < 5 ; i++)
{
free(p[i]);
}
free(p);
}
程序3:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void main(void)
{
char ***pStr;
int i , j , k ;
// 自己分配一个三维的[3][4][5]
pStr = (char ***)malloc(3 * sizeof(char **)); //第一维
//分配二维的
for(i = 0 ; i < 3 ; i++)
{
*(pStr + i) = malloc(4 * sizeof(char *));
}
//分配三维
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
*(*(pStr + i) + j) = malloc(5 * sizeof(char));
}
}
//使用分配的内存
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ; j++)
{
for(k = 0 ; k < 5 ; k++)
{
pStr[i][j][k] = 'a' ;
printf("%c" , pStr[i][j][k]);
}
printf("\n");
}
}
//释放第三维的内存
for(i = 0 ; i < 3 ; i++)
{
for(j = 0 ; j < 4 ;j++)
{
free((pStr[i][j]));
}
}
//释放第二维的内存
for(i = 0 ; i < 3 ; i++)
{
free(pStr[i]);
}
//释放第一维的内存
free(pStr);
}
转载于:https://www.cnblogs.com/bohaoist/p/4607194.html
malloc动态分配多维数组相关推荐
- 如何在C/C++中动态分配二维数组
如何在C/C++中动态分配二维数组 在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较 ...
- c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc
C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...
- C++中动态分配多维数组
在C++中,定义数组时,数组的维数必须是常量表达式,定义多维数组也是这个要求.如果需要定义一个由用户输入维度的多维数组时,就必须使用动态分配内存的方式进行定义. 1 二维数组 以二维数组为例,在< ...
- 如何在C++中动态分配二维数组
一般是三种方法:(1)用vector的vector,(2)先分配一个指针 数组,然后让里面每一个指针再指向一个数组,这个做法的好处是访问数组元素时比较直观,可以用a[x][y]这样的写法,缺点是它相当 ...
- 纯c语言实现动态分配多维数组的方法
http://etdata.blogbus.com/logs/2232838.html 转载自Fish-Bowl 普通的动态内存分配只能分配一维的数组: 例如: #define ARRAY_SIZE ...
- malloc申请二维数组的四种方法
方法一: 二级指针 #include<stdio.h> #include<stdlib.h> int main() {int i,j;int row = 4,col = 5;/ ...
- 用malloc开辟二维数组的三种办法
第一种办法:用指针数组:首先看一下原理图(以开辟整型二维数组三行四列为例,以下都是): 先看一下用malloc申请一维数组: int *p=(int *)malloc(10*sizeof(int)); ...
- C语言 用malloc开辟二维数组
用malloc可以开辟空间 对于二维数组来说 我们开辟的话同样也可以用malloc来开辟 以下用不同方法开辟二维数组均为开辟三行四列为的二维数组. 1.利用指针数组 存储示意图: 代码如下: int ...
- c语言二维数组错误语法,关于c语言动态分配二维数组free的错误求dalao看看怎么回事谢谢啊~~~~...
typedef struct { int**data; int row; int col; }MyMatrix; typedef MyMatrix* Matrix; /* 编写矩阵输入函数 INPUT ...
最新文章
- springboot自动装配原理笔记一
- P4报名截止|引爆1.1万亿基因测序市场,精准医学50+殿堂级专家议程大曝光
- MongoDB ( 五 )高级_索引
- 从coding走向管理
- Linux 禁ping和开启ping操作
- Kitten编程猫的工程文件 bcm,能发布成Android平台的apk文件吗
- 列赋值为列表_Pandas入门-3-新增数据列操作
- 【SpringMVC框架】注解的处理器映射器和适配器配置
- 首都师范 博弈论 3 4 2反复剔除严格劣策略
- java文件 空心_解决Eclipse中java文件的图标变成空心J的问题
- 目前流行的、强大的基于Java的机器学习开发库精选
- mpa和pis_扭矩换算mpa(压力与扭矩换算)
- php trim /r/n,「php中trim函数使用」- 海风纷飞Blog
- 201943 ovf 文件的导出和导入
- 数学建模经验谈(四)-参加国赛的几点建议
- asp和asp.net有什么区别?
- Mybatis系列2:模板模式在Mybatis中的执行器中的应用
- 学习倍福BECKHOFF PLC可利用的资源
- python日历函数_Python—日历函数—日历模块的常用函数,calendar,常见
- 固态硬盘、机械硬盘工作原理和区别(内附接口知识)
热门文章
- 利用74LS138实现4-16译码器,并在QuartusⅡ上进行仿真
- 联想笔记本电脑,重新安装系统之U盘启动方法
- 事务回滚什么意思 try_分布式事务 TCC-Transaction 源码分析——事务恢复
- audio 上一首 下一首 自定义样式_总有一首网易云,藏着你忘不掉的人。
- android系统电量优化,基于Android系统网络耗电量优化方法的.pdf
- oracle dbms lob,如何使用DBMS_LOB从文件中加载CLOB数据
- python具有一些突出优点_Python具有一些突出优点,它们是:()
- unity桌面设置vnc_Ubuntu 16.04下安装VNC和Unity桌面系统
- java里的局部变量为什么不能加static?
- 004_JSONArray对象公共方法