C语言结构体与共用体
【C语言结构体与共用体】是C语言中一种重要的数据类型,它允许我们将不同类型的变量组合在一起,形成一个复合的数据结构。这使得我们能够更有效地管理和操作复杂的数据。 ### 1. 结构体的概念 结构体是C语言中用于组合不同类型数据的一种方式。在实际编程中,我们常常需要处理包含多种属性的对象,如学生信息,每个学生有学号、姓名、性别、年龄和地址等属性。结构体就是用来封装这些属性的工具,将它们作为一个整体来处理。 ### 2. 结构体的定义和引用 定义结构体类型的一般形式是: ```c struct 结构体名 { 成员类型 成员名; 成员类型 成员名; ... }; ``` 例如,定义一个`student`结构体: ```c struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; ``` 定义结构体变量,可以这样写: ```c struct student student1, student2; ``` 这样,`student1`和`student2`都是`struct student`类型的变量,它们分别有自己的内存空间存储各个成员。 ### 3. 结构体变量的初始化 初始化结构体变量可以在定义时完成,如: ```c struct student student1 = {1001, "ZhangXin", 'M', 19, 90.5, "Shanghai"}; ``` 或者在定义后进行初始化: ```c struct student student2; student2.num = 1002; strcpy(student2.name, "WangLi"); student2.sex = 'F'; student2.age = 20; student2.score = 98.0; strcpy(student2.addr, "Beijing"); ``` ### 4. 结构体数组 结构体数组是结构体的变种,允许我们创建多个具有相同结构的结构体。例如: ```c struct student class_students[10]; ``` 这将创建一个能容纳10个学生的数组。 ### 5. 指向结构体类型数据的指针 结构体指针可以用来访问和修改结构体变量的成员。例如: ```c struct student *ptr = &student1; ptr->score = 95.0; ``` 这里的`ptr`指向`student1`,`ptr->score`就表示`student1`的分数。 ### 6. 用指针处理链表 链表是一种动态数据结构,由结构体节点组成,每个节点包含数据和指向下一个节点的指针。通过结构体指针,我们可以操作链表中的元素。 ### 7. 共用体 共用体(union)是另一种C语言的复合类型,但与结构体不同,它允许所有成员共享同一块内存区域。这意味着任何时刻只能访问其中一个成员的值。 ### 8. 枚举类型 枚举(enum)用于定义一组命名的整数常量,方便表示一组有限的、相关的值。 ### 9. typedef `typedef`关键字可以用来为现有的类型创建一个新的别名,例如: ```c typedef struct student Stud; Stud s1; ``` 这样,`s1`就是一个`Stud`类型的变量,`Stud`是`struct student`的别名。 通过理解并熟练使用这些概念,开发者可以更好地组织和管理C语言中的复杂数据,提高代码的可读性和效率。