C语言复习:宏定义、typedef与动态内存管理

需积分: 50 9 下载量 47 浏览量 更新于2024-07-13 收藏 299KB PPT 举报
"这篇复习资料主要涵盖了C语言中定义结构体类型变量的几种方法,以及相关的编程概念,如宏定义、typedef、指针、动态存储管理和内存管理函数。" 在C语言中,定义结构体类型变量是组织复杂数据类型的重要手段。结构体允许我们将不同类型的数据组合在一起,形成一个新的复合数据类型。在给定的描述中,展示了两种定义结构体类型变量的方法: 1. 先声明结构体类型,然后创建该类型的变量。例如: ```c struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; ``` 接着,我们可以创建两个`struct student`类型的变量`student1`和`student2`: ```c struct student student1, student2; ``` 2. 在声明结构体类型的同时定义变量。这一步骤可以合并: ```c struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2; ``` 这种方法更加简洁,一次性完成了结构体类型定义和变量的声明。 此外,资料中还提到了C语言中的宏定义和`typedef`: - **宏定义**:`#define`用于创建宏,可以分为无参数宏和带参数宏。无参数宏如`#define OK1`,带参数宏如`#define S(a, b) a * b`,宏定义主要用于文本替换。 - **typedef**:可以用来为已存在的类型创建新的别名,如`typedef int ElemType`,这样可以用`ElemType`代替`int`,简化代码可读性。例如,`typedef int ARR[10]`使得`ARR a, b, c, d;`等同于`int a[10], b[10], c[10], d[10];` 接下来,资料介绍了指针的概念: - **指针**:指针变量是用来存储内存地址的,它们都有固定的字节大小。例如,`int *p`声明了一个整型指针`p`,可以通过`&`运算符获取变量的地址,`*`运算符用于访问指针所指向的值。 动态存储管理是C语言中处理内存的重要部分,主要包括以下函数: - **malloc()**:用于动态分配内存,返回值是分配的内存块的首地址。例如,`int *p = (int *)malloc(20);` 分配了20个字节的空间,`malloc`返回的是无类型指针,通常需要转换成实际的数据类型指针。 - **free()**:释放之前通过`malloc`分配的内存,防止内存泄漏。例如,`free(pd);`会释放指针`pd`指向的内存。 - **realloc()**:用于调整已经分配的内存大小,如果无法扩展,则返回`NULL`。使用时需注意,如果`realloc`失败,原内存会被释放,所以需要保存原始指针。 在编程实践中,确保正确使用这些内存管理函数,防止内存泄漏,是非常关键的。在整个程序运行结束前,应该释放所有动态申请的存储空间。