目录
一、为什么要存在动态内存开辟
在上篇文章实现通讯录时,我们提前开辟了能够存储1000个人信息的空间大小,当我们要存储1001个人的信息时,存不下,当我们只存储1个人的信息时,空间又会造成极大的浪费,这样的空间开辟的大小时固定的。
所以动态的开辟内存就显得极为重要,当我们需要的空间比较小时,我们就少开辟,当我们需要的空间较大时,我们就开辟的多一点。空间的开辟会变得很灵活。
二、动态内存函数
2.1 malloc
2.1.1 函数介绍
void *malloc( size_t size );
malloc:开辟一块内存空间
头文件:stdlib.h 或 malloc.h
返回值:开辟成功则返回一个已经分配好的空间的指针,返回值类型为void* ,如果使用其他类型的指针来接收,则需要将malloc强制类型转换。
没有开辟成功则返回NULL。
参数:需要开辟多少字节。
2.1.2 函数的使用
2.1.3 free
void free( void *memblock );
没有返回值
参数:先前分配的要释放的内存块
2.2 calloc
2.2.1 函数介绍
void *calloc( size_t num, size_t size );
calloc:在内存中分配一个数组,其中元素初始化为 0。
头文件:stdlib.h 或 malloc.h
返回值:返回一个已经分配好的空间的指针,返回值类型为void* ,如果使用其他类型的指针接收,需要将calloc强制类型转换
参数:
num : 元素数量
size : 一个元素的大小
2.2.2 函数的使用
2.3 realloc
2.3.1 函数的介绍
void *realloc( void *memblock, size_t size );
realloc:重新分配内存空间(在已经开辟的空间基础上,扩展或收缩)
头文件:stdlib.h 或 malloc.h
返回值:
开辟成功有两种情况:
1.空间足够大返回原来的内存地址
2.空间不够大返回重新分配的空间的指针
开辟失败:返回NULL
参数:
memblock : 指向以前分配的内存块的指针
size : 新的空间需要开辟多少字节
2.3.2 函数的使用