"这篇复习资料主要涵盖了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`失败,原内存会被释放,所以需要保存原始指针。
在编程实践中,确保正确使用这些内存管理函数,防止内存泄漏,是非常关键的。在整个程序运行结束前,应该释放所有动态申请的存储空间。