第十一章复杂数据类型 结构体、线性链表、共用体与枚举
第十一章 复杂数据类型 结构体、线性链表、共用体与枚举
本章学习指导 在日常生活中,我们常会遇到一些需要填写的 登记表,如住宿表、成绩表、通讯地址等。在这些 表中,填写的数据是不能用同种数据类型描述的, 在住宿表中我们通常会登记上姓名、性别、身份证 号码等项目;在通讯地址表中我们会写下姓名、邮 编、邮箱地址、电话号码、Ema等项目。这些表 中集合了各种数据,无法用前面学过的任一种数据 类型完全描述 复杂数据类型一结构体、线性链表、共用体和 枚举类型,包括它们的定义、变量的说明和应用
本章学习指导 在日常生活中,我们常会遇到一些需要填写的 登记表,如住宿表、成绩表、通讯地址等。在这些 表中,填写的数据是不能用同一种数据类型描述的, 在住宿表中我们通常会登记上姓名、性别、身份证 号码等项目;在通讯地址表中我们会写下姓名、邮 编、邮箱地址、电话号码、E-mail等项目。这些表 中集合了各种数据,无法用前面学过的任一种数据 类型完全描述。 复杂数据类型—结构体、线性链表、共用体和 枚举类型,包括它们的定义、变量的说明和应用
111结构体 问题】什么是结构体类型?什么是结构体变量?结 构体类型与数组类型有什么区别和联系? 姓名年龄性别身份证民族住址电话号 号 码 〔(字符数组)(整型)(字符(长整型)(字符)(字符数组)(长整型
11.1 结构体 【问题】什么是结构体类型?什么是结构体变量?结 构体类型与数组类型有什么区别和联系? 姓名 年龄 性别 身份证 号 民族 住址 电话号 码 (字符数组) (整型) (字符) (长整型) (字符) (字符数组) (长整型)
1121结构体类型的定义 结构体类型的定义形式为: struct类型名 成员项表列}; 例如包含上图中全部类型数据的结构体类型的定义如下: struct person结构体类型名 { char name[20];P以下定义成员项的类型和名字 int age; char sex long num; char nation. char address[20] long tel; }
11.2.1 结构体类型的定义 结构体类型的定义形式为: struct 类型名 {成员项表列}; 例如包含上图中全部类型数据的结构体类型的定义如下: struct person /* 结构体类型名*/ { char name[20]; /* 以下定义成员项的类型和名字*/ int age; char sex; long num; char nation; char address[20]; long tel; };
1122结构体变量的定义和引用 结构体变量的说明有三种方法: 用已定义的结构体类型名定义变量。 例如: struct person student, worker; 定义了两个结构体变量 student和 worker* 用上面的结构体类型还可再定义变量: struct person men, women;
11.2.2 结构体变量的定义和引用 结构体变量的说明有三种方法: 1.用已定义的结构体类型名定义变量。 例如: struct person student,worker; /* 定义了两个结构体变量student和worker*/ 用上面的结构体类型还可再定义变量: struct person men,women;
2在定义结构体类型的同时定义结构体变量。例如: Struct person char name [20: int age; long tel; ]student, worker; 一般的形式为: struct类型名 成员项表列 }变量名表列; 这样定义的结构体类型也还可多次使用,如: struct person men, women;
2.在定义结构体类型的同时定义结构体变量。例如: struct person { char name[20]; int age; …… long tel; }student,worker; 一般的形式为: struct 类型名 { 成员项表列 }变量名表列; 这样定义的结构体类型也还可多次使用,如: struct person men,women;
3不定义结构体类型名,直接定义结构体变量。 一般形式为: struct 成员项表列 变量名表列;
3.不定义结构体类型名,直接定义结构体变量。 一般形式为: struct {成员项表列 }变量名表列;
结构体变量的引用 1.无嵌套的情况 引用结构体变量成员的形式为: 结构体变量名·成员名 其中的“.”叫“结构体成员运算符”,这样引 用的结构体成员相当于一个普通变量,例如: student,num /结构体变量 student的成员num,相当于一个长整型变量* student name P结构体变量 studen的成员name,相当于一个字符数组名*
结构体变量的引用 1. 无嵌套的情况 引用结构体变量成员的形式为: 结构体变量名·成员名 其中的“.”叫“结构体成员运算符”,这样引 用的结构体成员相当于一个普通变量 ,例如: student.num /* 结构体变量student的成员num,相当于一个长整型变量 */ student.name /* 结构体变量student的成员name,相当于一个字符数组名 */
2有嵌套的情况 在有嵌套的情况下,访问的应是结构体的基 本成员,因为只有基本成员直接存放数据,且数 据是基本类型或上面介绍的数组类型,引用形式 为: 结构体变量名结构体成员名…结构体成员名基本成员名 即从结构体变量开始,用成员运算符“”逐 级向下连接嵌套的成员直到基本成员,不能省略 ,例如: student, birthday year 基本成员year,相当于一个整型变量*
在有嵌套的情况下,访问的应是结构体的基 本成员,因为只有基本成员直接存放数据,且数 据是基本类型或上面介绍的数组类型,引用形式 为: 结构体变量名·结构体成员名·…·结构体成员名·基本成员名 即从结构体变量开始,用成员运算符“.”逐 级向下连接嵌套的成员直到基本成员,不能省略 ,例如: student.birthday.year /* 基本成员year ,相当于一个整型变量 */ 2.有嵌套的情况
11.2.3结构体变量的赋值 1结构体变量的初始化 在以上结构体变量的三种定义的同时都可以进行初始化 赋值,例如: struct person stud1=t Wang Li,18,M, 34011 h, 12, 13 Bejing Road, 20988771, stud2=t Yu Ping,19,F, 34082,h, 12,25 Hefei Road",5531678} 注意初始化数据应与类型中的各个成员在位置上一一对 应。对于嵌套的结构体类型变量,初始化是对各个基本类型 的成员赋初值,例如 struct person student=f Wang Li 12, 5, 1974, "M',340201,"h,12,"13 Bejing Road",2098877
11.2.3 结构体变量的赋值 1 结构体变量的初始化 在以上结构体变量的三种定义的同时都可以进行初始化 赋值,例如: struct person stud1={"Wang Li",18, 'M',34011, 'h',12,"13 Bejing Road",2098877}, stud2={"Yu Ping",19, 'F',34082, 'h',12,"25 Hefei Road",5531678}; 注意初始化数据应与类型中的各个成员在位置上一一对 应。对于嵌套的结构体类型变量,初始化是对各个基本类型 的成员赋初值,例如: struct person student={"Wang Li",12,5,1974, 'M',340201,'h',12,"13 Bejing Road",2098877};