
第 10 章 结构体与枚举1.结构体类型定义2.结构体使用(成员访问、整体赋值)(列表)3.结构体指针4.结构体数组5.共用体和枚举
1 1.结构体类型定义 2.结构体使用(成员访问、整体赋值) 3.结构体指针(列表) 4.结构体数组 5.共用体和枚举 第 10 章 结构体与枚举

问题引出...目前为止,学习的数据类型有:int(short,long)、float(double)、char但是,现实中,一条信息总是包含多个类型的数据,例如一个学生的信息就至少要包含:姓名 (字符串)学号 (整数)性别 (其他类型)出生日期(几个整数)各学科成绩(实数)Page2
Page 2 问题引出. 目前为止,学习的数据类型有: int(short,long) 、float(double)、char 但是,现实中,一条信息总是包含多个类型的数据,例如 一个学生的信息就至少要包含: 姓名(字符串) 学号(整数) 性别(其他类型) 出生日期(几个整数) 各学科成绩(实数)

问题引出...如果有多个重复信息,我们可以定义多个类型的数组组成学生数据库:如(假定10000名学生):char name[10000][10];int id[10000];但是这样用非常不方便,我们取某个学生信息时候还要从不同是数组中取。有没有可能将不同类型的数据放到一起,捆绑起来当一个新的数据体使用呢?Page
Page 3 问题引出. 如果有多个重复信息,我们可以定义多个类型的数组组成 学生数据库: 如 (假定10000名学生): char name[10000][10]; int id[10000]; . 但是这样用非常不方便,我们取某个学生信息 时候还要从不同是数组中取。 有没有可能将不同类型的数据放到一起,捆绑 起来当一个新的数据体使用呢?

问题引出...为此我们门希望有更加复杂的数据类型,C语言支持用基本数据类型组合形成“复杂数据类型这就是“结构体”结构体是基本条目固定不同类型的若干成员组合形成新的复杂数据类型。结构体与基本类型一样,可以定义变量,可以进行各种运算,在内存中占据一段连续存储空间。Page
Page 4 问题引出. 为此我们希望有更加复杂的数据类型, C语言支持用基本数据类型组合形成“复杂数据类型” 这就是“结构体” 结构体是基本条目固定、不同类型的若干成员组合 形成新的复杂数据类型。结构体与基本类型一样,可 以定义变量,可以进行各种运算,在内存中占据一段 连续存储空间

1、结构体类型定义struct结构体名称struct tagstudentt1cID[24];1/学号char类型名1成员名1;cName[128];//姓名charint类型名2成员名2;nScore[128]:/1成绩3;类型名n成员名n;>struct:关键字,是定义结构体类型的标志。结构体名称:标识符,其命名规则同变量名称。类型名1~n:说明了结构体成员的数据类型。成员名1~n:用户定义的一个或多个结构体成员的名称,其命名规则同变量名,多个同类型的成员彼此间用逗号分隔。Page5
Page 5 1、结构体类型定义 ➢struct:关键字,是定义结构体类型的标志。 ➢结构体名称:标识符,其命名规则同变量名称。 ➢类型名1~n:说明了结构体成员的数据类型。 ➢成员名1~n:用户定义的一个或多个结构体成员的名 称,其命名规则同变量名,多个同类型的成员彼此间 用逗号分隔。 struct 结构体名称 { 类型名1 成员名1; 类型名2 成员名2; ······ 类型名n 成员名n; };

1、结构体类型定义struct tagstudentstruct结构体名称1CID[24];/学号KcharcName[128];//姓名char;intnscore[128];//成绩3;特别提醒:1、关键字必须是struct2、成员必须用(3、结构体类型必须以“;”为结尾4、每个成员定义也必须以“;”为结尾Page
Page 6 1、结构体类型定义 struct 结构体名称 { }; 特别提醒: 1、关键字必须是 struct 2、成员必须用 { } 3、结构体类型必须以“;”为结尾 4、每个成员定义也必须以“;”为结尾

1、结构体类型定义struct tagData结构体中的成员也可以主是一个结构体变量,即int nYear,nMonth,nDay;;结构体的嵌套struct tagstudent1charcID[24]1/学号charcName[128];//姓名特别注意:intnScorel1281://成结struct taqData Birthday;结构体不是变量?是数据类型。Page
Page 7 1、结构体类型定义 结构体中的成员也可以 是一个结构体变量,即 结构体的嵌套。 特别注意: 结构体不是变量 ,是数据类型

1、结构体类型定义typedef关键字typedef关键字的作用是:为一个已经定义的类型起一个新名字。已经定义的类型当然也包括结构体。typedef struct tagstudent以后就可以用STUDENT代例如:charcID[24]1学号替结构体类型名来定义结构charcName[128];//姓名体变量了。intnScore[128];//成绩>STUDENT;也可以uoid main()typedef int INT;1typedef double real;struct tagstudentstue;STUDENT stu1;Page
Page 8 1、结构体类型定义 typedef关键字 typedef关键字的作用是: 为一个已经定义的类型起一个新名字。 已经定义的类型当然也包括结构体。 例如: 以后就可以用STUDENT代 替结构体类型名来定义结构 体变量了。 也可以 typedef int INT; typedef double real;

1、结构体类型定义结构体在C++中升级为类 class例:时间类《类名>classclass ctimeprivate:(《int second;1;//注意不要漏掉未尾的分号} ;只充许本类成员函数访问和调用(缺省访问属性)private:充许本类或其它类的成员函数访问和调用public:充许本类或派生类的成员函数访问和调用protected:Page
Page 9 结构体在C++中升级为类 class class { private: public: protected: }; // 注意不要漏掉末尾的分号 private: 只允许本类成员函数访问和调用(缺省访问属性) public: 允许本类或其它类的成员函数访问和调用 protected: 允许本类或派生类的成员函数访问和调用 例:时间类 class Ctime { public: int hour; int minute; int second; }; 1、结构体类型定义

2、结构体类型使用1、用结构体声明变量(1)先定义结构体类型。(2)就如普通类型一样定义变量。structSTD?int nId;charname[32];float score[32];>;void main()VSTD S;cin>>s.nId;cin>>s.name;cin>>s.score[o]>>s.score[1]>>s.score[2]>>s.score[3]>>s.score[4]Page10
Page 10 2、结构体类型使用 1、用结构体声明变量 (1)先定义结构体类型。 (2)就如普通类型一样定义变量