第七章 结构体、共用体和枚举类型
第七章 结构体、共用体和枚举类型
7-1结构体类型概述 ◇结构体的概念 前面我们介绍了基本类型(或称简单类型)的变量(如整 型字符型变量等)也介绍了一种构造类型数据数组 但这些数据类型还很不够,为此C语言提供了一种数据结构 称为结构体( structure)。可以将不同类型的数据组合成一个有 机的整体,且数据是互相联系的。它相当于其它高级语言中 的“记录”,如下表所示,每一项称为结构体的成员或域 num name sex age score addr 10010 Min 18 87.5 Beijing
7-1 结构体类型概述 结构体的概念 前面,我们介绍了基本类型(或称简单类型)的变量(如整型, 实型,字符型变量等),也介绍了一种构造类型数据___数组。 但这些数据类型还很不够,为此,C语言提供了一种数据结构, 称为结构体(structure)。可以将不同类型的数据组合成一个有 机的整体,且数据是互相联系的。它相当于其它高级语言中 的“记录”,如下表所示,每一项称为结构体的成员或域。 num name sex age score addr 10010 Li Min M 18 87.5 Beijing
结构体的定义 ◆一般格式: struct结构体名称 结构体成员列表 结构体 person:表示 用户定义了一种新数 例 结构体名称据类型,用这种类型 的定义的每一个变量 struct person 将在内存中占用的空 I int num 结构体成员间为各成员所占空间 int age 之和,本例为: char sex 2+2+1+8=13Byte char name[8 } 注意 不能少
结构体的定义 一般格式: struct 结构体名称 { 结构体成员列表 }; 例: struct person { int num; int age; char sex; char name[8]; } ; 结构体名称 结构体成员 注意“ ; ”不能少 结构体person:表示 用户定义了一种新数 据类型,用这种类型 的定义的每一个变量 将在内存中占用的空 间为各成员所占空间 之和,本例为: 2+2+1+8=13Byte
7-2结构体类型变量的定义和引用 ◇定义结构体变量的方法 ◇先定义结构体,再定义结构体变量。 例:前面定义了结构体类型: person,可以定义结构 体变量如下: struct person student, worker; 结构体类型标识符」构体变量名 ◇在定义结构体的同时,定义结构体变量。 例: struct person 结构体类型标识符 I int numi char name[8 Student, worker; 结构体变量名
7-2 结构体类型变量的定义和引用 定义结构体变量的方法 先定义结构体,再定义结构体变量。 例:前面定义了结构体类型:person,可以定义结构 体变量如下: struct person student, worker; 在定义结构体的同时,定义结构体变量。 例: struct person { int num; char name[8]; }student, worker; 结构体类型标识符 结构体变量名 结构体变量名 结构体类型标识符
◇直接定义结构体类型变量 例: struct 没有类型名的结构体类型 [int num; char name[8 student, worker i 注意:因以上结构体没有名称,所以不能用 struct men的方法定义结构体量
直接定义结构体类型变量: 例: struct {int num; char name[8]; }student, worker ; 没有类型名的结构体类型 注意:因以上结构体没有名称,所以不能用 struct men; 的方法定义结构体量
结构体的嵌套 ◇在定义结构体类型时,可以利用已定义的另一个 结构体类型来定义其成员 struct dateint month 定义了名为date 的结构体类型 int dayE int yeari birthday struct personint numE 结构体类型成员 char name[8; struct date birthday; ] 定义了名为date 的结构体类型
结构体的嵌套 在定义结构体类型时,可以利用已定义的另一个 结构体类型来定义其成员。 例: struct date{int month; int day; int year;}; struct person{int num; char name[8]; struct date birthday; }; 定义了名为date 的结构体类型 birthday 是一个 结构体类型成员 定义了名为date 的结构体类型
结构体变量的初始化 ◇一般可在定义结构体变量的同时进行初始化: 例 struct person student=【张小 12,15,1982} ◇与数组不同,不能直接用常量对结构体变量进 初始化: 例: struct person student student【张小三”,12,15,19823
结构体变量的初始化 一般可在定义结构体变量的同时进行初始化: 例: struct person student={“张小三” , 12,15,1982}; 与数组不同,不能直接用常量对结构体变量进行 初始化: 例: struct person student; student={“张小三” ,12,15,1982};
结构体变量的引用 结构体变量名结构体变量的成员 ◇引用一级成员: student, num 引用多级成员(成员的成员) student birthday year 结构体变量名皆构体变量的成员成员的成员 ◆可以将一个结构体变量的值作为一个整体赋给另 结构体变量
结构体变量的引用 引用一级成员: student.num 引用多级成员(成员的成员): student.birthday.year 结构体变量名 结构体变量的成员 结构体变量名 结构体变量的成员 成员的成员 可以将一个结构体变量的值作为一个整体赋给另 一个结构体变量
结构体变量的输入、输出 ◇C中不允许将结构体变量作为一个整体进行输入、 输出。 只能输入或输出最末级成员。 Agi: scanf(%d student num) scanf( d,, student birthday year) printf(%d,student num); printf( d, student, birthday year 例L71.0输出结构体变量各元素。 例L7-1输入、输出结构体变量各元素
结构体变量的输入、输出 C中不允许将结构体变量作为一个整体进行输入、 输出。 只能输入或输出最末级成员。 例:scanf(“%d”,student.num); scanf(“%d”, student.birthday.year); printf(“%d”,student.num); printf(“%d”, student.birthday.year); 例L7-1-0 输出结构体变量各元素。 例L7-1 输入、输出结构体变量各元素
7-3结构体数组 ◇结构体数组的定义 ◇在结构体变量的定义基础上增加下标即可。 ◇结构体数组的初始化 ◇与普通数组相似,但要求一定要用花括号将每个数组 元素的的数据括起来。 ◆结构体数组的引用 ◇在结构体变量名的引用基础上,在结构体变量名后加 下标即可。其它与结构体变量相同。 汪意: 般不要在一个 scant0中接收不同的数据类型,否则 可能出现难以预料的错误。 >尽量使用gets0读取用户输入的字符串 例L7-2定义、初始化结构体数组,并输出各元素
7-3 结构体数组 结构体数组的定义 在结构体变量的定义基础上增加下标即可。 结构体数组的初始化 与普通数组相似,但要求一定要用花括号将每个数组 元素的的数据括起来。 结构体数组的引用 在结构体变量名的引用基础上,在结构体变量名后加 下标即可。其它与结构体变量相同。 注意: ➢一般不要在一个scanf()中接收不同的数据类型,否则 可能出现难以预料的错误。 ➢尽量使用gets()读取用户输入的字符串。 例L7-2 定义、初始化结构体数组,并输出各元素