从零开始学习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;
}

在这里插入图片描述

相关内容

热门资讯

如何保持身体健康英语作文【精... 如何保持身体健康英语作文 篇一Title: Tips for Maintaining a Healt...
交友高中优秀英语作文(精彩3... 交友高中优秀英语作文 篇一Title: The Importance of Choosing Fri...
龟兔赛跑英语小作文【优质3篇... 龟兔赛跑英语小作文 篇一:An Unpredictable RaceOnce upon a time...
新年的英语作文【推荐6篇】 新年的英语作文 篇一New Year Celebrations Around the WorldTh...
有关种植物的英语范文【优选6... 有关种植物的英语范文 篇一Title: The Importance of Plants in Ou...
我的家乡英语作文 有关我的家乡英语作文(通用25篇)  家乡,一个亲切的词;家乡,一个温暖的家;家乡,一个优雅的地方。...
Save Water英语作文... Save Water英语作文 篇一Water is essential for all forms ...
生命在于运动的英语作文【精简... 生命在于运动的英语作文 篇一Title: The Importance of Physical Ac...
我的一个好朋友英语作文(优质... 我的一个好朋友英语作文 篇一My Best FriendI am lucky to have a b...
疫情过后中考英语作文范文36... 疫情过后中考英语作文范文36篇 篇一Title: The Lessons Learned from ...
雪绒花的中英文歌词 关于雪绒花的中英文歌词  《雪绒花》是美国电影和音乐剧《音乐之声》中的著名歌曲,于1959年面世。理...
写节日的英语作文【实用6篇】 写节日的英语作文 篇一The Spring Festival is the most importa...
我的家乡英语作文【最新6篇】 我的家乡英语作文 篇一My HometownMy hometown is a small town ...
英语前台接待服务总结范文【优... 英语前台接待服务总结范文 篇一在过去的一段时间里,我一直担任着英语前台接待的职责。通过这个工作经验,...
表示观点的英语句子【优选3篇... 表达观点的英语句子 篇一Title: The Importance of Education in ...
黑骏马英语读后感(通用3篇) 黑骏马英语读后感 篇一《黑骏马》是一部让我深受感动的小说。故事发生在二战时期,描述了一个男孩阿立克斯...
成长路上无捷径记叙文(推荐3... 成长路上无捷径记叙文 篇一在成长的道路上,我们常常会被告知要坚持努力,但很少有人告诉我们,成功并非一...
考研英语作文【实用6篇】 考研英语作文 篇一:如何高效备考英语考研备考英语考研是每个考生都面临的重要任务之一。英语是很多考生的...
中国发展的英语演讲稿1000... 中国发展的英语演讲稿1000词 篇一Title: "China's Remarkable Devel...
国庆假期英语作文(优选5篇) 国庆假期英语作文 篇一:我的国庆假期The National Day holiday is one ...