9-1 结构体(一)ppt课件.ppt
9.1 结构体类型(一)结构体类型的定义结构体类型的定义21结构体类型的概念结构体类型的概念结构体类型变量的定义结构体类型变量的定义3 3结构体类型的嵌套定义结构体类型的嵌套定义4 4数据类型数据类型指针类型指针类型构造类型构造类型空类型空类型基本类型基本类型数值类型数值类型字符类型字符类型 char枚举类型枚举类型 enum整型整型实型实型基本整型基本整型 int短整型短整型 short长整型长整型 long单精度型单精度型 float双精度型双精度型 double数组数组结构体结构体 struct共同体共同体 union 例如:工资表例如:工资表以学生档案为例,假设包括如下数据类项:以学生档案为例,假设包括如下数据类项:姓名姓名(name)(name):字符串:字符串性别性别(sex)(sex):字符型:字符型出生日期出生日期(birthday)(birthday):datedate结构体结构体四门课成绩四门课成绩( (scsc) ):一维实型数组:一维实型数组结构体是一种较为结构体是一种较为复杂复杂但却非常但却非常灵活灵活的的用户自定义用户自定义构造型数据类型构造型数据类型一个结构体类型可以由一个结构体类型可以由若干若干个称为个称为成员(或域)成员(或域)的成分组成的成分组成不同结构体类型根据需要由不同类型成员组成不同结构体类型根据需要由不同类型成员组成, ,但成员数量必须固定但成员数量必须固定学生学生(student)结构体类型定义的一般形式:结构体类型定义的一般形式:structstruct 结构体标识名结构体标识名 成员表列成员表列 ; ; 注意:注意:结构体说明要以结构体说明要以; ;结尾结尾structstruct 结构体标识名结构体标识名 类型名类型名1 1 结构成员名表结构成员名表1 1; 类型名类型名2 2 结构成员名表结构成员名表2 2; 类型名类型名n n 结构成员名表结构成员名表n n; ; ; 关键字 定义结构体类型的标志用户自定义标示符定义结构体变量时可缺省类型名 可以是简单类型或是构造类型结构体的定义只列出了该结构的结构体的定义只列出了该结构的组成组成情况(类型模板),情况(类型模板),编译程序并未因此分配存储空间。编译程序并未因此分配存储空间。使用结构体变量、数组或指针变量前,必须对其进行使用结构体变量、数组或指针变量前,必须对其进行定义定义,为其开辟对应的内存空间存储结构体数据。为其开辟对应的内存空间存储结构体数据。可以用可以用四种方式四种方式定义结构体类型的变量。定义结构体类型的变量。以学生档案为例,假设包括如下数据类项。分别用以学生档案为例,假设包括如下数据类项。分别用四种四种不同方式定义不同方式定义学生结构体类型的学生结构体类型的变量变量、数组数组和和指针指针。姓名姓名(name)(name):字符串:字符串性别性别(sex)(sex):字符型:字符型四门课成绩四门课成绩( (scsc) ):一维实型数组:一维实型数组structstruct student student char name12; char name12; char sex; char sex; float sc4; float sc4; ; ;定义方式定义方式1 1:先定义结构体类型,再单独进行变量定义先定义结构体类型,再单独进行变量定义struct struct studentstudent std, pers3,std, pers3,* *pstd;pstd;注意:不能只使用struct而不写结构体标识名student,必须一起使用才能唯一确定前面所说明的结构体类型namesexsc0sc1sc2sc3结构体变量结构体变量stdstd的的内存示意图内存示意图结构体变量中的各个成员在内存中按照结构体变量中的各个成员在内存中按照类型说明类型说明的顺序的顺序依次排列依次排列,成员名可以和程序中变量名同名,互不干扰,成员名可以和程序中变量名同名,互不干扰namesexsc0sc1sc2sc3.pers3pers0pers1pers2结构体数组结构体数组pers3pers3的内存示意图的内存示意图namesexsc0sc1sc2sc3结构体指针变量结构体指针变量* *pstdpstd的内存示意图的内存示意图#ff43d60pstdstructstruct student student char name12; char name12; char sex; char sex; float sc4; float sc4; std,pers3,std,pers3,* *pstdpstd; ;定义方式定义方式2 2:紧跟在结构体类型说明之后定义紧跟在结构体类型说明之后定义structstruct char name12; char name12; char sex; char sex; float sc4; float sc4; std,pers3,std,pers3,* *pstdpstd; ;定义方式定义方式3 3: 适用场合:适用场合: 不需要再次定义此类型不需要再次定义此类型 结构变量时结构变量时在说明一个在说明一个无名无名结构体类型的同时,结构体类型的同时,直接直接进行定义进行定义typedef structtypedef struct STREC;STREC;使用使用typedeftypedef说明一个结构体类型名,再用说明一个结构体类型名,再用新类型名来定义变量。新类型名来定义变量。STREC STREC std, pers3,std, pers3,* *pstd;pstd;STREC是一个具体的结构体类型名,能唯一的标识这种结构体类型,可以用来定义变量。定义方式定义方式4 4:以学生档案为例,假设增加以学生档案为例,假设增加“出生日期出生日期” ” 数据类项。数据类项。姓名姓名(name)(name):字符串:字符串性别性别(sex)(sex):字符型:字符型出生日期出生日期(birthday)(birthday):datedate结构体结构体四门课成绩四门课成绩( (scsc) ):一维实型数组:一维实型数组姓名姓名(name):字符串:字符串性别性别(sex):字符型:字符型出生日期出生日期(birthday):date结构体结构体四门课成绩四门课成绩(sc):一维实型数组:一维实型数组定义形式定义形式2 2:structstruct studentstudent char name12; char name12; char sex; char sex; structstruct date date intint year,month,dayyear,month,day; ; birthday; birthday; float float scsc4;4; ; ;structstruct studentstudent char name12; char name12; char sex; char sex; structstruct date birthday; date birthday; float float scsc4;4; ; ;定义形式定义形式1 1:structstruct datedate intint year; year; intint month; month; intint day; day; ; ;结 构 体 嵌套嵌套定义结构体类型变量的定义嵌套定义结构体类型变量的定义structstruct student student char name12; char name12; char sex; char sex; struct date birthday;struct date birthday; float sc4; float sc4; std,pers3,std,pers3,* *pstdpstd; ;structstruct datedate intint year; year; intint month; month; intint day; day; ; ;定义方式定义方式1 1:先声明一个先声明一个struct datestruct date类型,然后在声类型,然后在声明明struct studentstruct student类型时类型时, ,将成员将成员birthdaybirthday指定为指定为struct datestruct date类型。类型。structstruct studentstudent char name12; char name12; char sex; char sex; structstruct datedate intint year,month,dayyear,month,day; ; birthday; birthday; float float scsc4;4; stdstd, ,* *pstd,perspstd,pers33; ;定义方式定义方式2 2:结构体成员嵌套定义的同时,结构体成员嵌套定义的同时,声明声明struct studentstruct student结构体类型的变量。结构体类型的变量。namesexyearmonthdaysc0sc1sc2sc3结构体变量结构体变量stdstd的内存示意图的内存示意图struct date birthday;结构体变量中的各个成员在内存中按照结构体变量中的各个成员在内存中按照类型说明类型说明的的顺序顺序依次排列依次排列本专题中主要介绍了结构体的相关概念,结构体的定义和本专题中主要介绍了结构体的相关概念,结构体的定义和结构体类型变量的定义方法。需要大家注意的是:结构体类结构体类型变量的定义方法。需要大家注意的是:结构体类型和结构体变量是两个不同的概念,不能混淆。定义了结构型和结构体变量是两个不同的概念,不能混淆。定义了结构体变量之后,就可以很方便的访问和使用结构体变量中的各体变量之后,就可以很方便的访问和使用结构体变量中的各个成员了。下一专题中,我们将介绍如何实现结构体变量赋个成员了。下一专题中,我们将介绍如何实现结构体变量赋初值和如何引用结构体变量成员。初值和如何引用结构体变量成员。小结小结