当前位置:鱼C工作室 >带你学C带你飞 > 查看文章

第一季:语法基础 – 动态内存管理2 | 带你学C带你飞S1E38

动态内存管理2

 

让编程改变世界

Change the world by program


 

由于 malloc 并不会帮你初始化申请的内存空间,所以你需要自己进行初始化。当然你可以写一个循环来做这件事儿,但我不建议你这么做,标准库提供了更加高效的函数:memset。

 

以 mem 开头的函数被编入字符串标准库,函数的声明包含在 string.h 这个头文件中:

memset — 使用一个常量字节填充内存空间

memcpy — 拷贝内存空间

memmove — 拷贝内存空间

memcmp — 比较内存空间

memchr — 在内存空间中搜索一个字符

 

…… 此处省略N多内容,具体请看视频讲解 ……

 

calloc

 

申请并初始化一系列内存空间,函数原型:

void *calloc(size_t nmemb, size_t size);

 

calloc 函数在内存中动态地申请 nmemb 个长度为 size 的连续内存空间(即申请的总空间尺寸为 nmemb * size),这些内存空间全部被初始化为 0。如果函数调用成功,返回一个指向申请的内存空间的指针,由于返回类型是 void 指针(void *),所以它可以被转换成任何类型的数据;如果函数调用失败,返回值是 NULL。如果 nmemb 或 size 参数设置为 0,返回值也可能是 NULL,但这并不意味着函数调用失败。

 

…… 此处省略N多内容,具体请看视频讲解 ……

 

realloc

 

重新分配内存空间,函数原型:

void *realloc(void *ptr, size_t size);

 

以下几点是需要注意的:

1. realloc 函数修改 ptr 指向的内存空间大小为 size 字节。

2. 如果新分配的内存空间比原来的大,则旧内存块的数据不会发生改变;如果新的内存空间大小小于旧的内存空间,可能会导致数据丢失,慎用!

3. 该函数将移动内存空间的数据并返回新的指针。

4. 如果 ptr 参数为 NULL,那么调用该函数就相当于调用 malloc(size)。

5. 如果 size 参数为 0,并且 ptr 参数不为 NULL,那么调用该函数就相当于调用 free(ptr)。

6. 除非 ptr 参数为 NULL,否则 ptr 的值必须由先前调用 malloc、calloc 或 realloc 函数返回。

 

…… 此处省略N多内容,具体请看视频讲解 ……

 

【课后作业】S1E38:动态内存管理2 | 课后测试题及答案

【知识点备忘】S1E38:动态内存管理2


为您推荐

报歉!评论已关闭.