从零开始学习c语言|21、动态内存管理
创始人
2024-05-29 17:12:20
0

一、malloc函数

1、什么是malloc函数

malloc是memery(内存)和allocate(分配)的缩写,顾名思义,malloc函数为动态分配内存的意思 

2、malloc函数语句

int *p=(int *)malloc(sizeof(int))
malloc函数的形参为申请的内存空间大小,上述申请了一个int型数据的大小
malloc函数的返回值是这一块内存空间的首地址,上述代码即是将指针变量p指向这动态申请内存的首地址。
(*int)强制类型转换,即将该返回的地址类型强制转换为一个整型变量的地址,也就是说p和p+1相差
一个整型大小。
上述代码一个申请了12个字节的内存大小,p变量占8个字节(与cpu的大小有关),
p指向的内存为4个字节。
p本身的内存是静态分配的,p指向的内存是动态分配的
free(p)把p指向的内存释放掉,而p本身的内存只能由程序执行完毕,系统自动释放

3、malloc函数的用法

int *parry=(int *)malloc(sizeof(int*5);
动态申请5个整型变量大小的内存,即20个字节,parry指针变量指向的是该内存的首地址,
int * 表示该指针变量只能指向int型变量的地址,故parry等价于指向前4个字节,
*parry等价于parry[0];
#include 
#include 
int main()
{int *parry = (int *)malloc(sizeof(int) * 5);for (int i = 0; i < 5; i++){printf("请输入%d个元素的值\n", i + 1);scanf("%d", &parry[i]);}for (int i = 0; i < 5; i++){printf("第%d的值为 %d \n", i + 1, parry[i]);}return 0;
}

在这里插入图片描述

创建动态数组的好处

  • 1、动态的决定数组的大小
  • 2、数组可以由程序员动态的创建和释放
  • 3、数组可跨函数使用

4、初始化内存空间

以mem开头的函数被编入字符串标准库,函数的声明包含在头文件string.h中
  • memset:使用一个常量字节填充内存空间
  • memcpy:拷贝内存空间
  • memmov:拷贝内存空间
  • memcmp:比较内存空间
  • memchar:在内存空间搜索一个字符
#include 
#include 
#include 
#include 
int main()
{int *parry = (int *)malloc(sizeof(int) * 5);if (parry == NULL){exit(-1);}memset(parry, 0, sizeof(int) * 5);for (int i = 0; i < 5; i++){printf("%d ", parry[i]);}free(parry);return 0;
}

在这里插入图片描述

二、calloc函数

动态申请内存空间,并对其初始化
int *p=(int*)calloc(4,sizeof(int));

上述语句等价于

int *p=(int*)malloc(4*sizeof(int));
memset=(p,0,4*sizeof(int));

三、realloc函数

重新分配内存空间
int *ptr=NULL;
ptr = (int *)realloc(ptr, sizeof(int));//返回新的内存地址给ptr,ptr原本的值保存在新的内存空间
编写代码:让用户任意输入整数,输入一个整数,就动态添加一个内存空间,直到用户输入-1为止
#include 
#include 
#include 
#include 
int main()
{int num = 0;int i = 0;int *ptr = (int *)malloc(sizeof(int));if (ptr == NULL){exit(-1);}while (1){printf("请用户输入想要录入的数,输入-1跳出程序\n");scanf("%d", &num);if (num == -1)break;ptr[i] = num;i++;ptr = (int *)realloc(ptr, sizeof(int) * (i + 1));if (ptr == NULL){exit(-1);}}for (int j = 0; j < i; j++){printf("%d ", ptr[j]);}free(ptr);return 0;
}

在这里插入图片描述

相关内容

热门资讯

毕业典礼主持人主持稿开场白 毕业典礼主持人主持稿开场白(精选17篇)  在我们平凡的日常里,很多情况下我们都需要用到开场白,开场...
学校元旦晚会主持稿 学校元旦晚会主持稿15篇  在日新月异的现代社会中,需要使用主持稿的情境愈发增多,主持稿一般是由主持...
小学数学五年级上册平行四边形... 人教版小学数学五年级上册平行四边形的面积说课稿  内容分析:  九年义务教育六年制小学数学教材关于几...
一年级上册《0的认识和0的加... 一年级上册《0的认识和0的加减法》说课稿  作为一位杰出的老师,总不可避免地需要编写说课稿,编写说课...
经典动员大会发言稿 经典动员大会发言稿(通用6篇)  在日新月异的现代社会中,发言稿应用范围愈来愈广泛,发言稿可以起到整...
高中学校运动会加油稿 高中学校运动会加油稿(通用40篇)  随着社会不断地进步,越来越多人会去使用加油稿,借助加油稿可以给...
《给朱元思书》高一语文说课稿 《给朱元思书》高一语文说课稿  一、教学目标、重点难点的设计  初中语文教学大纲要求:诵读古代诗词和...
校园文明礼仪广播稿范文   校园文明礼仪广播稿范文一  A: 敬爱的辅导员老师  B: 亲爱的少先队员们  A: 当灿烂的阳...
校长在教师节的讲话-中学校长... 校长在教师节的讲话-中学校长教师节讲话稿新的学年开始了,在这充满喜悦和收获的金秋季节里,我们举行开学...
小学期中考试表彰大会老师优秀... 小学期中考试表彰大会老师优秀发言稿(精选14篇)  在社会发展不断提速的今天,我们使用上发言稿的情况...
小学春季开学典礼校长发言稿 小学春季开学典礼校长发言稿(通用12篇)  发言稿是参加会议者为了在会议或重要活动上表达自己意见、看...
运动会加油稿 跳高 致跳高运动员在阳光的照耀下,跳高的比赛场地格外辉煌,运动健儿们,用那矫键的身躯,冲刺着一个又一个的高...
《小花饰》说课稿 《小花饰》说课稿  1、说教材  我说课的内容是小学美术第三册第5课《小花饰》,本课属于手工类型。 ...
竞选生活委员发言稿 竞选生活委员发言稿六篇  【篇一:竞选生活委员发言稿】尊敬的老师、亲爱的同学们:  大家好!  我此...
英文主持稿 英文主持稿  good afternoon, everyone.  good afternoon. ...
新少先队员入队誓词   少先队是神圣而光荣的,每一个孩子都以加入少先队为荣,而新队员入队需要一份良好的发言稿。下面就是C...
三年级冬季趣味运动会通讯稿 三年级冬季趣味运动会通讯稿今天,天公作美,给足了我们三年(6)班面子,连续几天的雨终于停了,我们在昆...
大学迎新晚会新闻稿 大学迎新晚会新闻稿范本  大学迎新晚会新闻稿范本1:  为了响应我院“文明校园建设”和“养成教育”号...
婚礼女方爸爸讲话稿 婚礼女方爸爸讲话稿(精选22篇)  在当今社会生活中,需要使用讲话稿的场合越来越多,讲话稿可以按照用...
六年级语文《荷花》说课稿 六年级语文《荷花》说课稿  一、设计理念  情感素养是人的一切素养的血肉。没有了情感,就没有什么素质...