下面试自己写的三个测试程序,如果看懂了基本上动态分配多维数组就没什么问题啦:重点 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动态分配多维数组相关推荐

  1. 如何在C/C++中动态分配二维数组

    如何在C/C++中动态分配二维数组 在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较 ...

  2. c语言字符串二维数组的动态分配应,C语言中动态分配二维数组复习过程.doc

    C语言中动态分配二维数组复习过程.doc C语言中动态分配二维数组在C中动态分配内存的,对于单个变量,字符串,一维数组等,都是很容易的.C中动态分配二维数组的方法,很少有C语言书中描述,我查找了有的C ...

  3. C++中动态分配多维数组

    在C++中,定义数组时,数组的维数必须是常量表达式,定义多维数组也是这个要求.如果需要定义一个由用户输入维度的多维数组时,就必须使用动态分配内存的方式进行定义. 1 二维数组 以二维数组为例,在< ...

  4. 如何在C++中动态分配二维数组

    一般是三种方法:(1)用vector的vector,(2)先分配一个指针 数组,然后让里面每一个指针再指向一个数组,这个做法的好处是访问数组元素时比较直观,可以用a[x][y]这样的写法,缺点是它相当 ...

  5. 纯c语言实现动态分配多维数组的方法

    http://etdata.blogbus.com/logs/2232838.html 转载自Fish-Bowl 普通的动态内存分配只能分配一维的数组: 例如: #define ARRAY_SIZE  ...

  6. malloc申请二维数组的四种方法

    方法一: 二级指针 #include<stdio.h> #include<stdlib.h> int main() {int i,j;int row = 4,col = 5;/ ...

  7. 用malloc开辟二维数组的三种办法

    第一种办法:用指针数组:首先看一下原理图(以开辟整型二维数组三行四列为例,以下都是): 先看一下用malloc申请一维数组: int *p=(int *)malloc(10*sizeof(int)); ...

  8. C语言 用malloc开辟二维数组

    用malloc可以开辟空间 对于二维数组来说 我们开辟的话同样也可以用malloc来开辟 以下用不同方法开辟二维数组均为开辟三行四列为的二维数组. 1.利用指针数组 存储示意图: 代码如下: int ...

  9. c语言二维数组错误语法,关于c语言动态分配二维数组free的错误求dalao看看怎么回事谢谢啊~~~~...

    typedef struct { int**data; int row; int col; }MyMatrix; typedef MyMatrix* Matrix; /* 编写矩阵输入函数 INPUT ...

最新文章

  1. springboot自动装配原理笔记一
  2. P4报名截止|引爆1.1万亿基因测序市场,精准医学50+殿堂级专家议程大曝光
  3. MongoDB ( 五 )高级_索引
  4. 从coding走向管理
  5. Linux 禁ping和开启ping操作
  6. Kitten编程猫的工程文件 bcm,能发布成Android平台的apk文件吗
  7. 列赋值为列表_Pandas入门-3-新增数据列操作
  8. 【SpringMVC框架】注解的处理器映射器和适配器配置
  9. 首都师范 博弈论 3 4 2反复剔除严格劣策略
  10. java文件 空心_解决Eclipse中java文件的图标变成空心J的问题
  11. 目前流行的、强大的基于Java的机器学习开发库精选
  12. mpa和pis_扭矩换算mpa(压力与扭矩换算)
  13. php trim /r/n,「php中trim函数使用」- 海风纷飞Blog
  14. 201943 ovf 文件的导出和导入
  15. 数学建模经验谈(四)-参加国赛的几点建议
  16. asp和asp.net有什么区别?
  17. Mybatis系列2:模板模式在Mybatis中的执行器中的应用
  18. 学习倍福BECKHOFF PLC可利用的资源
  19. python日历函数_Python—日历函数—日历模块的常用函数,calendar,常见
  20. 固态硬盘、机械硬盘工作原理和区别(内附接口知识)

热门文章

  1. 利用74LS138实现4-16译码器,并在QuartusⅡ上进行仿真
  2. 联想笔记本电脑,重新安装系统之U盘启动方法
  3. 事务回滚什么意思 try_分布式事务 TCC-Transaction 源码分析——事务恢复
  4. audio 上一首 下一首 自定义样式_总有一首网易云,藏着你忘不掉的人。
  5. android系统电量优化,基于Android系统网络耗电量优化方法的.pdf
  6. oracle dbms lob,如何使用DBMS_LOB从文件中加载CLOB数据
  7. python具有一些突出优点_Python具有一些突出优点,它们是:()
  8. unity桌面设置vnc_Ubuntu 16.04下安装VNC和Unity桌面系统
  9. java里的局部变量为什么不能加static?
  10. 004_JSONArray对象公共方法