广州网站建设培训学校seo优化外包
news/
2025/10/6 14:18:45/
文章来源:
广州网站建设培训学校,seo优化外包,哪做网站比较便宜,wordpress 采集英文插件了解动态内存函数 前言#xff1a;一、malloc函数二、calloc函数三、realloc函数四、free函数 前言#xff1a;
在C语言中#xff0c;动态内存函数是块重要的知识点。以往#xff0c;我们开辟空间都是固定得#xff0c;数组编译结束后就不能继续给它开辟空间了#xff0… 了解动态内存函数 前言一、malloc函数二、calloc函数三、realloc函数四、free函数 前言
在C语言中动态内存函数是块重要的知识点。以往我们开辟空间都是固定得数组编译结束后就不能继续给它开辟空间了开辟的空间满了就不能在开辟空间了就是不能在添加数据了。学习本文章我们就可以解决这个问题向内存申请空间满啦可以继续申请空间。
一、malloc函数
需要头文件——stdlib.h 浏览器直接翻译 malloc函数动态内存开辟的函数
void* malloc(size_t size);功能 这个函数向内存申请一个连续可用的空间并返回指向这块空间的指针。
如果开辟成功则返回一个指向开辟好空间的指针。如果开辟失败则返回一个NULL指针因此malloc的返回值一定要做检查。返回值的类型是void* 所以malloc函数并不知道开辟空间的类型具体在使用的时候由使用者自己决定。如果size为0malloc的行为是标准还是未定义的由编译器决定。malloc申请的空间当程序退出时要还给操作系统当程序不退出动态申请的内存不会主动释放需要用free函数来释放。 malloc申请的内存空间 malloc申请到空间后直接返回这个空间的首地址不会初始化空间的内容。 举个例子
#include stdio.h
#include stdlib.h
int main()
{
//变长数组的知识点vs不能用gcc可以用//int num 0;//scanf(%d, num);//int arr[num] { 0 };int* ptr NULL;ptr (int*)malloc(40);if (ptr NULL)//判断ptr指针是否为空{perror(malloc);exit; }else{int i 0;for (i 0; i 10; i)//给开辟的空间赋值ptr[i] i 1;}free(ptr);//释放ptr指向的空间ptr NULL;//让ptr指向空return 0;
}二、calloc函数
需要头文件——stdlib.h 浏览器直接翻译 calloc函数动态内存分配函数
void* calloc(size_t num, size_t size);功能
函数的功能是为num个大小为size元素开辟一块空间并且把空间的每一个字节初始化为0.与malloc函数的区别只在于calloc函数会在返回地址之前把申请空间的每一个字节初始化为0. 举个例子
#include stdio.h
#include stdlib.h
int main()
{int* p (int*)calloc( 10,sizeof(int));if (p NULL)//成立开辟失败{perror(calloc);exit;}free(p);p NULL;return 0;
}p指向的地址
三、realloc函数
需要头文件——stdlib.h 浏览器直接翻译 realloc函数动态内存管理更加灵活 有时候我们发现过去申请的空间小了有时候我们会觉得过去申请的空间过大为了合理使用内存我们一定要对内存的大小做灵活的调整。realloc函数可以做到对动态开辟内存大小进行调整。
void* realloc(void* ptr, size_t size);功能
ptr是要调整的内存地址。size是调整后的新大小。返回值为调整之后的内存起始位置。这个函数在调整原空间大小的基础上还会将原来的数据移到新的空间。 注意 realloc调整内存空间有两种情况。 情况1原有空间之后有足够大的空间原地扩容。 当是情况1的时候要扩展内存就直接在原有内存之后直接追加空间原来空间的数据不发生改变。 情况2原有空间后面没有足够大的空间异地扩容。 当是情况2的时候原有空间后面没有足够多的空间时扩展的方法是在堆空间上另外找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。 所以我们在使用realloc函数的时候一定要注意 1、开辟新的空间。 2、 会将旧的空间数据拷贝到新的空间。 3、释放旧的空间。 4、返回新空间的起始地址。 举个例子
#include stdio.h
#include stdlib.h
int main()
{int* ptr (int*) malloc( 100 );if (ptr ! NULL){
//可以使用这个空间}else{perror(malloc);exit;}//扩展空间int* p (int*)realloc(ptr, 1000);//可能增容失败if (p ! NULL){//增容成功ptr p;//p指向的空间交给ptr去维护}free(ptr);//把开辟早堆上的空间释放掉ptr NULL;return 0;
}四、free函数
需要头文件——stdlib.h 浏览器直接翻译 free函数释放动态开辟的内存
void* free(void* ptr);功能
如果参数ptr指向的那个空间不是动态开辟的那free函数的行为是未定义的。如果参数ptr是NULL指针则函数什么事都不做。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929396.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!