尊7章 结村共同体 茶类判
2021/2/24 1 第7章 结构体、共同体 和枚举类型
结构体类型的说明 在实际问题中,一组数据往往具有不同的数据类型 例如,在学生登记表中,姓名应为字符型;学号可 为整型或字符型;年龄应为整型;性别应为字符型; 成绩可为整型或实型。显然不能用一个数组来存放这 组数据。因为数组中各元素的类型和长度都必须 致,以便于编译系统处理。为了解决这个问题,C++ 中给出了另一种构造数据类型“结构”。它相当于 其它高级语言中的记录。 “结构”是一种构造类型,它是由若干“成员”组 成的。每一个成员可以是一个基本数据类型或者又是 个构造类型。结构既是一种“构造”而成的数据类 型,那么在使用之前必须先定义它,也就是构造它 如同在说明和调用函数之前要先定义函数一样
2021/2/24 2 结构体类型的说明 在实际问题中,一组数据往往具有不同的数据类型 。例如, 在学生登记表中,姓名应为字符型;学号可 为整型或字符型; 年龄应为整型;性别应为字符型; 成绩可为整型或实型。 显然不能用一个数组来存放这 一组数据。 因为数组中各元素的类型和长度都必须一 致,以便于编译系统处理。为了解决这个问题,C++ 中给出了另一种构造数据类型——“结构”。 它相当于 其它高级语言中的记录。 “结构”是一种构造类型,它是由若干“成员”组 成的。 每一个成员可以是一个基本数据类型或者又是 一个构造类型。 结构既是一种“构造”而成的数据类 型, 那么在使用之前必须先定义它,也就是构造它。 如同在说明和调用函数之前要先定义函数一样
结构体类型的说明 般格式: struct结构类型名/ /struc是结构类型关键字 {数据类型数据项1; 数据类型数据项2; 数据类型数据项n 此行分号不能少! 如: struct stu ∥定义学生情况结构体 int num. 定义了结构的组 char namel20;成,未分配存储 char sex; float score: 单 2021/224
2021/2/24 3 结构体类型的说明 一般格式: struct 结构类型名 //struct是结构类型关键字 {数据类型 数据项1; 数据类型 数据项2; …… …… 数据类型 数据项n; }; //此行分号不能少! 如:struct stu{ //定义学生情况结构体 int num; //学号 char name[20]; //姓名 char sex; //性别 float score; //成绩 }; 定义了结构的组 成,未分配存储 单元
结构定义之后,即可进行变量说明。凡说明为 结构stu的变量都由上述4个成员组成。由此可见 结构是一种复杂的数据类型,是数目固定、类 型不同的若干有序变量的集合。 例1:定义一个反映学生基本情况的结构类型,用以存 储学生的相关信息。 功能:定义一个反映学生基本情况的结构类型 struct date/期结构类型:由年、月、日三项组成 int vear int month int day; 2021/224
2021/2/24 4 结构定义之后,即可进行变量说明。 凡说明为 结构stu的变量都由上述4个成员组成。由此可见 , 结构是一种复杂的数据类型,是数目固定、类 型不同的若干有序变量的集合。 例1:定义一个反映学生基本情况的结构类型,用以存 储学生的相关信息。 //功能:定义一个反映学生基本情况的结构类型 struct date //日期结构类型:由年、月、日三项组成 {int year; int month; int day; };
struct std info ∥学生信息结构类型 tchar no; ∥学号 char name 9; ∥姓名 char sex 3 ∥性别 struct date birthday ∥l日 struct score ∥成绩结构类型由学号和三门课共4项组成 &char no 7; ∥学号 int score1 ∥成绩1 int score2 ∥)绩2 int score3 ∥成绩3 2021/224 5
2021/2/24 5 struct std_info //学生信息结构类型 {char no[7]; //学号 char name[9]; //姓名 char sex[3]; //性别 struct date birthday; //生日 }; struct score //成绩结构类型由学号和三门课共4项组成 {char no[7]; //学号 int score1; //成绩1 int score2; //成绩2 int score3; //成绩3 };
注:(1)“结构类型名”和“数据项”的命名规则 ,与变量名相同 (2)数据类型相同的数据项,既可逐个、逐行 分别定义,也可合并成一行定义。 如:例1中sore类型也可改为如下形式: struct score/成绩结构类型和三门共4项组成 &char no 7; ∥学号 int scorel, score2, score3.;∥门成绩 (3)结构类型中的数据项,既可以是基本数据 类型,也允许是另一个已经定义的结构类型 如:例1代码中的结构类型 std info,其数据项 “ birthday”就是一个已经定义的日期结构 类型date。 2021/2/24 6
2021/2/24 6 注:(1)“结构类型名”和“数据项”的命名规则 ,与变量名相同。 (2)数据类型相同的数据项,既可逐个、逐行 分别定义,也可合并成一行定义。 如:例1中score类型也可改为如下形式: struct score//成绩结构类型和三门共4项组成 {char no[7]; //学号 int score1,score2,score3; //三门成绩 }; (3)结构类型中的数据项,既可以是基本数据 类型,也允许是另一个已经定义的结构类型。 如:例1代码中的结构类型std_info,其数据项 “birthday”就是一个已经定义的日期结构 类型date
(4)定义结构体的成员时,不能指定成员的存储 类为auto、 register、 extern,这是由于系统不为 结构体类型分配任何存储空间,但可以指定成员 的存储类型为 static 如: struct test auto int i, /不正确,不能指定自动存储类型 register int x 不正确,不能指定为寄存器存储类型 extern int f ∥不正确,不能指定为外部存储类型 static int y; ∥正确,可指定为静态存储类型 2021/224
2021/2/24 7 (4)定义结构体的成员时,不能指定成员的存储 类为auto、register、extern,这是由于系统不为 结构体类型分配任何存储空间,但可以指定成员 的存储类型为static。 如:struct test{ auto int i,j; //不正确,不能指定自动存储类型 register int x; //不正确,不能指定为寄存器存储类型 extern int f; //不正确,不能指定为外部存储类型 static int y; //正确,可指定为静态存储类型 };
定义结构体类型变量 可有三种方法定义结构体类型变量: 1.先定义结构,再说明结构变量。如: struct stu int num. char name 20 char sex: float score struct stu boyl,boy2;∥说明变量boy1和boy2为 u结构类型 2021/224 8
2021/2/24 8 定义结构体类型变量 可有三种方法定义结构体类型变量: 1. 先定义结构,再说明结构变量。如: struct stu{ int num; char name[20]; char sex; float score; }; struct stu boy1,boy2; //说明变量boy1和boy2为 stu结构类型
也可以用宏定义使一个符号常量来表示一个结构类 型。如: #define stu struct stu STUR int num char name 201; char sex: float score: STU boyl, boy2 2021/224 9
2021/2/24 9 也可以用宏定义使一个符号常量来表示一个结构类 型。如: #define STU struct stu STU{ int num; char name[20]; char sex; float score; }; STU boy1,boy2;
2.在定义结构类型的同时说明结构变量。如: struct stu int num; char name 201; char sex float score: 3boyl, boy2; 3.直接说明结构变量。如: struct int num char name 201; char sex: float score: 3boyl, boy2; 2021/224 10
2021/2/24 10 2. 在定义结构类型的同时说明结构变量。如: struct stu{ int num; char name[20]; char sex; float score; }boy1,boy2; 3. 直接说明结构变量。如: struct{ int num; char name[20]; char sex; float score; }boy1,boy2;