C语言结构体与共用体教程

0 下载量 130 浏览量 更新于2024-06-29 收藏 524KB PPT 举报
"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语言中灵活的数据组织方式,它们提供了组合不同数据类型并进行高效管理的能力。在实际编程中,根据需求选择合适的数据结构可以极大地提高代码的可读性和效率。