利用malloc函数分配二维数组
利用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函数分配二维数组相关推荐
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
- 黑马程序员——c语言学习心得——函数传递二维数组
黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化. 变量 ...
- c语言字符二维数组传参,C语言函数传递二维数组
C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...
- boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数
boost::python模块包装几个 C++ 函数 将二维数组操作为采用 NumPy 数组的 Python 函数作为参数 实现功能 C++实现代码 实现功能 boost::python模块包装几个 ...
- C/C++函数传递二维数组
目录 函数参数传递二维数组的问题 解决方案 1.传递第二维和更高维的大小 2.根据数组的存储原理把二位数组当作一维数组来操作(降维处理) 函数参数传递二维数组的问题 将二维数组当作参数的时候,必须指明 ...
- matlab 二维数组声明,Matlab字符串函数及二维数组
Matlab字符串函数及二维数组 发布时间:2017年07月28日 评论数:抢沙发 阅读数:833 strcmp(Str1,Str2),finder(S,s),strcat(S1,S2),disp(s ...
- c++ sort()函数对二维数组vector排序
c++ sort()函数对二维数组vector排序 sort (first, last) 对容器或普通数组中 [first, last) 范围内的元素进行排序,默认进行升序排序. 对于一个一维的数组, ...
- malloc动态创建二维数组(C语言)
c语言用malloc动态创建二维数组 #include <stdio.h> #include <stdlib.h> void fun(int m,int n){//行数,列数 ...
- c语言动态申请函数,C语言用malloc函数申请二维动态数组
C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { char * p=(char *)malloc(siz ...
最新文章
- SVD图片有损压缩测试
- 函数的参数-列表使用+=本质上是调用extend方法
- 前端面试题——HTML基础篇
- HH SaaS电商系统的商品类目设计
- 【Java】奇葩的猴子排序
- Mac OSX 下如何显示隐藏文件
- nginx linux 系统服务,把ngnix注册为linux服务 将Nginx设置为linux下的服务
- WIN7系统一个盘分多个盘的方法
- git使用过程及常用命令
- Idea Debug 时 JAVA对象转Json字符串 的操作
- 怎么仿站下载整站的文件
- 计算机审计风险背景,计算机审计风险探究
- shopex PHP Notice,shopex官网用PHP为SHOPEX增加日志功能代码
- 【CPU微架构】分支预测(二)常用分支预测算法
- iostat 第一次数据信息不正确/过滤第一条数据
- 硬盘数据恢复原理与方法(一)
- 程序员的专属吐槽会,你能听懂几个梗?
- Pycharm常用快捷键【快查字典版】
- php 多语言cms,帝国cms模板实现多国语言切换
- Ubuntu系统下编译C语言程序
热门文章
- 有一种爱叫思念,黄陈晨
- html5自动打印图片,神奇照片自动打印软件
- mysql group by month_sql - MySQL查询GROUP BY日/月
- 少儿编程教育好不好---《浅谈青少儿编程教育与计算思维》
- 将 三星PM983A 作为 移动硬盘 的使用记录
- c语言退回N帧滑动窗口协议,滑动窗口协议实验的报告.docx
- linux下安装和破解pycharm专业版
- 柯马机器人示教器编程_柯马COMAURacer3协作机器人维修示教器故障
- 辽宁高考成绩查询电话2021,辽宁高考成绩查询电话号码多少,2021年辽宁高考查分电话...
- 乡镇村委干部职工数字化办公管理小程序系统开发制作介绍