利用malloc()函数分配的内存是连续的的,我们可以先分配二维数组的行(即行指针),然后利用分配的行指针,再分配列指针。咱们以分配一个4x5的二维数组为例,如下图():

1、先分配连续的4块内存作为行,这些分配内存是连续的,并将S指向它

 S = (char**)malloc(sizeof(char*) * row);

 2、利用之前分配好的4块内存,每块内存(即对应的行)再分配5块内存作为列,每行指向对应分配好的5块内存(相当列)

for (i = 0; i < row; i++)S[i] = (char*)malloc(sizeof(char) * col);

注:每一行分配的内存是连续,但相邻两行的内存不一定连续(由于每次用malloc()给一行分配内存(这行内存分配的内存是连续的),下一次给下一行分配内存,不一定紧接着上一行最后的内存的地址,故相邻两行的内存不一定连续,即整体不连续)

3、测试程序

/*获取的二维数组,只有一行一行是连续的,但整体不是连续的*/
#include <stdio.h>
#include <stdlib.h>int main(void)
{char** S;int row, col, i, j;printf("请输入你需要创建的二维数组的行和列!!!\n");printf("请输入行:");scanf("%d", &row);printf("请输入列:");scanf("%d", &col);/*利用malloc申请内存*/S = (char**)malloc(sizeof(char*) * row); // 分配行for (i = 0; i < row; i++)S[i] = (char*)malloc(sizeof(char) * col); // 分配列for (i = 0; i < row; i++){for (j = 0; j < col; j++)printf("%p   ", &S[i][j]);printf("\n");}/*利用malloc()函数分配的内存在程序退出时,不要忘了利用free()函数释放要不容易造成内存泄漏*//*释放申请的内存*/for (i = 0; i < row; i++) // 先释放分配的列free(S[i]);free(S);               // 再释放分配的行return 0;
}

 程序输出:

由程序输出可以得出,每一行是连续的,但相邻行却不是连续的,符合上面的解释。

总结:利用这种方法分配的内存只要一行一行是连续的,但整体不会像声明的二维数组那样整体连续。

利用malloc函数分配二维数组相关推荐

  1. c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例

    详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...

  2. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  3. c语言字符二维数组传参,C语言函数传递二维数组

    C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...

  4. boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数

    boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数 实现功能 C++实现代码 实现功能 boost::python模块包装几个 ...

  5. C/C++函数传递二维数组

    目录 函数参数传递二维数组的问题 解决方案 1.传递第二维和更高维的大小 2.根据数组的存储原理把二位数组当作一维数组来操作(降维处理) 函数参数传递二维数组的问题 将二维数组当作参数的时候,必须指明 ...

  6. matlab 二维数组声明,Matlab字符串函数及二维数组

    Matlab字符串函数及二维数组 发布时间:2017年07月28日 评论数:抢沙发 阅读数:833 strcmp(Str1,Str2),finder(S,s),strcat(S1,S2),disp(s ...

  7. c++ sort()函数对二维数组vector排序

    c++ sort()函数对二维数组vector排序 sort (first, last) 对容器或普通数组中 [first, last) 范围内的元素进行排序,默认进行升序排序. 对于一个一维的数组, ...

  8. malloc动态创建二维数组(C语言)

    c语言用malloc动态创建二维数组 #include <stdio.h> #include <stdlib.h> void fun(int m,int n){//行数,列数 ...

  9. c语言动态申请函数,C语言用malloc函数申请二维动态数组

    C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { char * p=(char *)malloc(siz ...

最新文章

  1. SVD图片有损压缩测试
  2. 函数的参数-列表使用+=本质上是调用extend方法
  3. 前端面试题——HTML基础篇
  4. HH SaaS电商系统的商品类目设计
  5. 【Java】奇葩的猴子排序
  6. Mac OSX 下如何显示隐藏文件
  7. nginx linux 系统服务,把ngnix注册为linux服务 将Nginx设置为linux下的服务
  8. WIN7系统一个盘分多个盘的方法
  9. git使用过程及常用命令
  10. Idea Debug 时 JAVA对象转Json字符串 的操作
  11. 怎么仿站下载整站的文件
  12. 计算机审计风险背景,计算机审计风险探究
  13. shopex PHP Notice,shopex官网用PHP为SHOPEX增加日志功能代码
  14. 【CPU微架构】分支预测(二)常用分支预测算法
  15. iostat 第一次数据信息不正确/过滤第一条数据
  16. 硬盘数据恢复原理与方法(一)
  17. 程序员的专属吐槽会,你能听懂几个梗?
  18. Pycharm常用快捷键【快查字典版】
  19. php 多语言cms,帝国cms模板实现多国语言切换
  20. Ubuntu系统下编译C语言程序

热门文章

  1. 有一种爱叫思念,黄陈晨
  2. html5自动打印图片,神奇照片自动打印软件
  3. mysql group by month_sql - MySQL查询GROUP BY日/月
  4. 少儿编程教育好不好---《浅谈青少儿编程教育与计算思维》
  5. 将 三星PM983A 作为 移动硬盘 的使用记录
  6. c语言退回N帧滑动窗口协议,滑动窗口协议实验的报告.docx
  7. linux下安装和破解pycharm专业版
  8. 柯马机器人示教器编程_柯马COMAURacer3协作机器人维修示教器故障
  9. 辽宁高考成绩查询电话2021,辽宁高考成绩查询电话号码多少,2021年辽宁高考查分电话...
  10. 乡镇村委干部职工数字化办公管理小程序系统开发制作介绍