C语言程序设计-第7章:结构体详解

需积分: 0 2 下载量 182 浏览量 更新于2024-07-30 收藏 404KB PPT 举报
"C语言程序设计与应用的课程ppt第7章 结构体" 在C语言中,结构体(struct)是一种非常重要的构造数据类型,它允许我们把多个不同类型的变量组合在一起,形成一个新的数据集合。这章主要讲解了结构体的定义、结构体变量的声明与初始化以及结构体的嵌套。 1. **结构体类型的定义** 结构体通过`struct`关键字来定义,它可以包含各种基本数据类型(如int, char等)或者其他的构造数据类型。例如,定义一个名为`student`的结构体,包含学号(cNum)、姓名(cName)、年龄(nAge)和性别(cSex): ```c struct student { char cNum; char cName[20]; int nAge; char cSex; }; ``` 结构体定义的最后必须以分号`;}`结束,但不能省略。 2. **结构体的嵌套定义** 结构体可以嵌套定义,即在一个结构体中包含另一个结构体。例如,定义一个`date`结构体表示日期,然后将其作为`student`结构体的一个成员: ```c struct date { int nYear; int nMonth; int nDay; }; struct student { char cNum; char cName[20]; struct date dBirthday; }; ``` 或者,可以将`date`结构体的定义与`student`结构体的成员定义结合在一起: ```c struct student { char cNum; char cName[20]; struct { int nYear; int nMonth; int nDay; } dBirthday; }; ``` 3. **结构体变量的定义** - **独立定义结构体类型和变量**:首先定义结构体类型,然后声明结构体变量。例如: ```c struct student { // 成员定义 }; struct student sStu; ``` - **同时定义结构体类型和变量**:在结构体定义中直接声明变量,这通常用于简化的单例变量定义: ```c struct student { // 成员定义 } sStu; ``` - **无结构名的结构体变量**:可以直接定义不带结构体名称的结构体变量,但这种做法限制了对结构体类型的操作,只能创建该类型的单个变量: ```c struct { // 成员定义 } sS; ``` 4. **结构体变量的初始化** 结构体变量可以通过初始化列表进行初始化,例如: ```c struct student { char cNum; char cName[20]; int nAge; char cSex; } sStu = {'1001', "张三", 20, 'M'}; ``` 对于嵌套结构体,可以递归地初始化成员: ```c struct student { char cNum; char cName[20]; struct date dBirthday; } sStu = {'1001', "张三", {2000, 1, 1}}; ``` 5. **访问结构体成员** 使用点操作符`.`来访问结构体内的成员,例如: ```c printf("学号: %c, 姓名: %s, 年龄: %d, 性别: %c\n", sStu.cNum, sStu.cName, sStu.nAge, sStu.cSex); ``` 6. **结构体指针** 结构体变量还可以通过指针来访问,这在函数参数传递和动态内存分配时特别有用: ```c void printStudent(struct student *ptr) { printf("学号: %c, 姓名: %s, 年龄: %d, 性别: %c\n", ptr->cNum, ptr->cName, ptr->nAge, ptr->cSex); } // 调用函数 printStudent(&sStu); ``` 7. **结构体数组和结构体指针数组** 结构体可以用于创建数组,可以是结构体变量数组或结构体指针数组,用于存储多个相同类型的结构体实例。 ```c // 结构体变量数组 struct student students[10]; // 结构体指针数组 struct student *studentPointers[10]; ``` 8. **结构体与内存管理** 结构体在内存中是连续存储的,每个成员的地址是连续的。因此,结构体的大小是所有成员大小之和加上可能的字节对齐填充。 结构体的使用极大地增强了C语言的灵活性和表达能力,使得复杂的数据结构得以实现,是编写复杂程序的基础。在实际编程中,结构体广泛应用于文件系统、数据库、图形用户界面等领域。