"C语言结构体和共用体的讲解课件"
C语言中的结构体(Struct)和共用体(Union)是两种重要的构造数据类型,它们允许我们将不同类型的变量组合到一个复合数据类型中,方便管理和使用。下面将详细阐述这两个概念。
### 结构体(Struct)
结构体是一种自定义数据类型,它能将不同类型的数据组织在一起,形成一个整体。在C语言中,定义结构体的基本语法如下:
```c
struct [结构体名] {
类型标识符 成员名;
类型标识符 成员名;
...
} [变量名列表];
```
`struct` 是关键字,用于声明一个结构体类型,结构体名是可选的,如果省略,则称为无名结构体。成员类型可以是基本类型(如 int, char, float 等)或其他结构体或共用体。结构体类型定义并不分配内存,而是在定义结构体变量时才会分配。
例如,定义一个名为 `student` 的结构体类型,包含学号(num)、姓名(name)、性别(sex)、年龄(age)、分数(score)和地址(addr):
```c
struct student {
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
```
结构体变量可以通过以下方式定义:
```c
struct student stu1, stu2;
```
这会为 `stu1` 和 `stu2` 分配足够的内存来存储所有成员。
### 结构体变量的引用
访问结构体变量的成员,可以使用点操作符 `.`,如 `stu1.num` 表示访问 `stu1` 的学号。
### 结构体数组
结构体也可以作为数组元素,例如定义一个学生数组:
```c
struct student class[10];
```
这将创建一个包含10个 `student` 结构体的数组。
### 结构体与指针
结构体变量可以和指针一起使用,结构体指针变量可以用来指向结构体变量,如:
```c
struct student *ptr = &stu1;
```
这里 `ptr` 指向 `stu1` 的地址,通过指针可以访问和修改结构体成员,如 `(*ptr).num` 或 `ptr->num` 都表示访问 `stu1` 的学号。
### 共用体(Union)
共用体与结构体类似,但它在同一时间只能存储其中一个成员的数据。这是因为共用体的所有成员共享同一块内存空间。定义共用体的语法与结构体相似,只是用 `union` 关键字替换 `struct`:
```c
union [共用体名] {
类型标识符 成员名;
类型标识符 成员名;
...
} [变量名列表];
```
由于内存共享,共用体的大小通常等于其成员中占用内存最大的那个。
例如,定义一个包含整数和浮点数的共用体:
```c
union number {
int int_val;
float float_val;
};
```
在使用共用体时,一旦对一个成员赋值,其他成员的数据将被覆盖。因此,共用体常用于节省内存,特别是当处理多种可能的数据类型但只需要其中一种时。
结构体和共用体是C语言中灵活的数据组织方式,它们提供了组合不同数据类型并进行高效管理的能力。在实际编程中,根据需求选择合适的数据结构可以极大地提高代码的可读性和效率。