C语言动态存储管理:malloc, free, realloc

需积分: 15 9 下载量 2 浏览量 更新于2024-07-13 收藏 299KB PPT 举报
"这篇复习资料主要涵盖了C语言中的动态存储管理,包括malloc()、free()和realloc()函数的使用,以及宏定义、typedef的应用和指针的基础知识。" 在C语言中,动态存储管理允许程序员在程序运行时按需分配和释放内存。这对比静态内存分配(在编译时确定大小)提供了更大的灵活性。动态内存分配函数主要有三个: 1. **malloc()**: 这个函数用于在堆上动态地分配指定大小的内存。其函数原型为`void* malloc(unsigned int size)`,返回一个指向新分配内存的无类型指针。例如,要分配20个整数大小的空间,可以写为`int *p = (int *)malloc(20 * sizeof(int))`。分配成功返回非空指针,失败则返回NULL。 2. **free()**: 当动态分配的内存不再需要时,使用free()函数来释放内存,防止内存泄漏。例如,释放前面分配的内存可以写为`free(p)`。确保在释放内存前,保存了malloc的返回值,因为一旦丢失,内存就无法被正确释放。 3. **realloc()**: 该函数用于调整已分配内存区域的大小。函数原型为`void* realloc(void* ptr, size_t size)`,接受一个已分配内存的指针和新的大小,如果扩展成功,返回指向新内存区域的指针,原有内存区域的数据会保留;如果收缩内存,多余的内存会被释放;如果分配失败,原有的内存仍然有效,返回NULL。使用realloc时需要注意,如果返回NULL,原来的内存仍然有效,所以通常需要在调用后检查返回值,以防止丢失原内存。 除了动态存储管理,复习资料还提到了宏定义和typedef的使用: - **宏定义**:宏定义是预处理器的一项功能,用于文本替换。无参数的宏定义如`#define OK1`,带参数的宏定义如`#define S(a, b) a * b`,可以简化代码并提高可读性。 - **typedef**:typedef允许创建新的类型名,简化类型声明。例如,`typedef int ElemType`,然后可以用`ElemType e, *p`来声明变量e和指针p,而无需每次写`int`。此外,还可以定义数组类型,如`typedef int ARR[10]`,使得声明数组更简洁。 最后,复习资料中提到了**指针**,它是C语言的重要特性。指针变量存储的是其他变量的内存地址,类型不同的指针占用的内存字节数相同。使用`&`运算符获取变量的地址,`*`运算符用来解引用指针。定义指针变量时,例如`int *p`,然后可以使用`p = &a`或`p = &d`来赋值。正确理解和使用指针是掌握C语言的关键。