第7章结构类型数据描述 7.1结构体 7.2共用体 73枚举类型 74用 typedef定义类型名 7.5位段结构
第7章 结构类型数据描述 7.1 结构体 7.2 共用体 7.3 枚举类型 7.4 用 typedef 定义类型名 7.5 位段结构
第7章结构类型数据描述 7.1结构体 1.概述 在实际应用中,有时需要将一些有相互联系而类型 不同的数据组合成一个有机的整体,以便于引用。如学 生学籍档案中的学号、姓名、性别、年龄、成绩、地址 等数据,对每个学生来说,除了其各项的值不同外,但 表示形式是一样的。 num name sex age score Addr 10010 Li Fun 1887.5Beijing 这种多项组合又有内在联系的的数据称为结构体 ( structure)。它是可以由用户自己定义的
第7章 结构类型数据描述 这种多项组合又有内在联系的的数据称为结构体 (structure)。它是可以由用户自己定义的。 7.1 结构体 在实际应用中,有时需要将一些有相互联系而类型 不同的数据组合成一个有机的整体,以便于引用。如学 生学籍档案中的学号、姓名、性别、年龄、成绩、地址 等数据,对每个学生来说,除了其各项的值不同外,但 表示形式是一样的。 num name sex age score Addr 10010 Li Fun F 18 87.5 Beijing 1. 概述
2.结构体类型变量的定义 1)结构体类型的定义形式 struct结构体名 分量表}; 其中“分量表”中的分量也应进行类型说明即: 类型标识符分量名 例如: 两者缺一不可 struct student tint num char name [20] char sex: int age 分量描述 float score, char addr[30;
2. 结构体类型变量的定义 两者缺一不可 1) 结构体类型的定义形式 struct 结构体名 { 分量表 }; 其中“分量表”中的分量也应进行类型说明, 例如: struct student {int num; char name[20]; char sex; int age; float score; char addr[30]; }; 即: 类型标识符 分量名; 分量描述
由用户定义的“结构体类型”,可以同标准类型 样作为定义变量的类型。相当于 PASCAL语言中的 记录 record) 2)定义结构体类型变量的方法 ①先定义结构体类型再定义变量 定义了结构体类型 struct student后,可以用它 定义变量。如 struct student st1. st2. 注:不能写成 struct st1,st2;必须同时指定结构体名 为了方便起见,可以在程序开头定义符号常量进行 简化。如
由用户定义的“结构体类型”,可以同标准类型 一样作为定义变量的类型。相当于PASCAL语言中的 记录(record)。 2) 定义结构体类型变量的方法 先定义结构体类型再定义变量 定义了结构体类型 struct student 后,可以用它 定义变量。 注:不能写成 struct st1,st2; 必须同时指定结构体名。 为了方便起见,可以在程序开头定义符号常量进行 简化。如: 如: struct student st1, st2;
define STUDENT Struct student 则在程序中可以直接写成: STUDENT fint num char name [20] char sex: int age; float score char addr[30; STUDENT St1, st2
则在程序中可以直接写成: STUDENT {int num; char name[20]; char sex; int age; float score; char addr[30]; }; #define STUDENT struct student STUDENT st1, st2;
②在定义类型的同时定义变量 如: struct student fint num; char name[20]; char sex: int age; float score. char addr[30]; 3st1, st2; 则一般定义形式为: struct结构体名 分量表; }变量表;
在定义类型的同时定义变量 如:struct student {int num; char name[20]; char sex; int age; float score; char addr[30]; }st1,st2; struct 结构体名 { 分量表; } 变量表; 则一般定义形式为:
③直接定义结构类型变量 定义形式为: struct 分量表; }变量表; 在 struct后不出现结构体名,因此也不能再以此定 义相同的结构体变量。 3.关于结构体类型的几点说明 ①类型与变量是两个不同的概念。一般先定义结构体类 型,再定义变量为该类型。变量可以赋值、存取或运 算,而类型没有这些操作。在编译时,对变量分配空 间,对类型来说不存在分配空间。 ②对结构体中的分量可以单独使用
直接定义结构类型变量 定义形式为: struct { 分量表; }变量表; 在 struct 后不出现结构体名,因此也不能再以此定 义相同的结构体变量。 3.关于结构体类型的几点说明 类型与变量是两个不同的概念。一般先定义结构体类 型,再定义变量为该类型。变量可以赋值、存取或运 算,而类型没有这些操作。在编译时,对变量分配空 间,对类型来说不存在分配空间。 对结构体中的分量可以单独使用
③分量也可以是一个结构体变量。如 student中要增加 birthday,则可按如下方式进行定义: struct date fint month; int day;}先定义一个日期结构 int year } struct student struct date birthday; 该分量也是一个结构体 yst1, st2, 分量名可以与程序中的变量名相同,两者之间不会 产生混淆
分量也可以是一个结构体变量。如 student 中要增加 birthday,则可按如下方式进行定义: struct date {int month; int day; int year; }; struct student { struct date birthday; }st1, st2; 先定义一个日期结构 该分量也是一个结构体 分量名可以与程序中的变量名相同,两者之间不会 产生混淆
4.结构体类型变量的引用 引用结构体变量应遵守如下规则 1)结构体变量中分量的引用方式 结构体变量名·分量名[°二级分量名 其中:“·”为分量运算符,在所有的运算符中优先级最高 2)结构体变量的分量本身又属于结构体类型时只能对最 低级分量进行操作。如: st1.num: stlname: st1.birthday day; 写成St1 birthday并不会访问st1中的 birthday,只会 引起警告错误
4. 结构体类型变量的引用 引用结构体变量应遵守如下规则: 1) 结构体变量中分量的引用方式 结构体变量名分量名[ 二级分量名 ] 其中:“”为分量运算符, 在所有的运算符中优先级最高。 2) 结构体变量的分量本身又属于结构体类型时只能对最 低级分量进行操作。如: st1.num; st1.name; st1.birthday.day; 写成 st1.birthday 并不会访问st1中的birthday,只会 引起警告错误
3)不能将一个结构体变量直接进行输入输出,只能对结 构体变量的各分量进行输入输出。 如 scanf(“%d%s,%c,%d,%f%s”&st1) 错误 printf("%d, %s, %C, %d, %f, %s", st1) {错误 printf(%s,%d",st1. name, st1. birthday day); IEHA 4)分量和结构体变量的地址均可以被引用 如: scanf(“%d&st1num);输入st1mum的值 printf(%x”,&st1); 以十六进制输出st1的首地址
3) 不能将一个结构体变量直接进行输入输出,只能对结 构体变量的各分量进行输入输出。 如: scanf(“%d,%s,%c,%d,%f,%s”,&st1); 错误 printf(“%d,%s,%c,%d,%f,%s”,st1); 错误 printf(“%s,%d”,st1.name,st1.birthday.day); 正确 4) 分量和结构体变量的地址均可以被引用 如: scanf(“%d”,&st1.num); 输入st1.num的值 printf(“%x”,&st1); 以十六进制输出st1的首地址