C语言结构体详解
C语言中,结构体(struct)是一种复杂的数据类型,允许将不同类型的数据组合成一个有机的整体,以便于引用。在本章中,我们将详细介绍结构体的概念、定义和引用、结构体数组、指向结构体类型数据的指针、用指针处理链表、共用体、枚举类型和用typedef定义类型。
11.1 概述
在编程中,有时需要将不同类型的数据组合成一个有机的整体,以便于引用。例如,一个学生有学号、姓名、性别、年龄、地址等属性,可以将它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。
11.2 定义结构体类型变量的方法
可以采取以下三种方法定义结构体类型变量:
(1)先声明结构体类型再定义变量名,例如:struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2;
(2)在声明类型的同时定义变量,例如:struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2;
(3)直接定义结构体类型变量,例如:struct { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2;
11.3 结构体变量的引用
在定义了结构体变量后,系统会为之分配内存单元。例如,student1和student2在内存中各占59个字节(2+20+1+2+4+30=59)。
11.4 结构体数组
结构体数组是将多个结构体变量组合成一个数组,例如:struct student stu[3] = {{1, "Li Fun", 'M', 18, 87.5, "Beijing"}, {2, "Zhang Xin", 'M', 19, 90.5, "Shanghai"}, {3, "Wang Li", 'F', 20, 98, "Beijing"}};
11.5 指向结构体类型数据的指针
指向结构体类型数据的指针是一个指针变量,它指向一个结构体类型的数据,例如:struct student *p = &stu[0];
11.6 用指针处理链表
用指针处理链表可以实现链表的操作,例如:struct student *p = &stu[0]; p->next = &stu[1]; p->next->next = &stu[2];
11.7 共用体
共用体(union)是一种特殊的结构体,它的所有成员共享同一个存储空间,例如:union student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
11.8 枚举类型
枚举类型(enum)是一种特殊的整数类型,它的值只能是枚举常量,例如:enum color {red, green, blue};
11.9 用typedef定义类型
typedef可以用来定义一个新的类型名,例如:typedef struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } Student;
在本章中,我们详细介绍了结构体的概念、定义和引用、结构体数组、指向结构体类型数据的指针、用指针处理链表、共用体、枚举类型和用typedef定义类型。这些知识点对于C语言程序设计非常重要,掌握这些知识点可以帮助读者更好地理解和应用C语言。