第八章 结构体、共用体和枚举类型

上传人:沈*** 文档编号:246837056 上传时间:2024-10-16 格式:PPT 页数:41 大小:571.50KB
返回 下载 相关 举报
第八章 结构体、共用体和枚举类型_第1页
第1页 / 共41页
第八章 结构体、共用体和枚举类型_第2页
第2页 / 共41页
第八章 结构体、共用体和枚举类型_第3页
第3页 / 共41页
点击查看更多>>
资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title style,C,语言,第八章,结构体、共用体和枚举类型,结构体类型与结构体变量的定义,1,结构体数组,2,指向结构体类型数据的指针,3,共用体,4,枚举类型,5,类型定义符typedef,6,目前,已学习的数据类型:,基本数据类型:整形、实型、字符型,构造类型数据:数组其元素属于同一个数据类型。,有时需要把不同类型的数据组合成一个整体,且数据间具有联系。,如:一学生信息包括,学号n,o,姓名name 性别sex,年龄age 成绩score 地址addr,用“记录”表示如,图8-1,。,8.1,结构体类型与结构体变量的定义,结构体是一种构造数据类型,,,由若干“成员”组成。每一个成员可以是一个基本数据类型或者又是一个构造数据类型。,用途:把逻辑相关的不同类型的数据组合成一个整体自定义 数据类型,。,使用结构体之前必须先定义结构体,类型。,定义格式,struct,结构体名,类型说明符 成员名;,类型说明符 成员名;,;,8.1.1,结构体类型的定义,8.1.1,结构体类型的定义,【,例8.1,】,一个学生的数据信息包含有学号、姓名、性别、年龄、成绩、地址,将学生信息定义为以下结构体类型,。,struct,student,int,no;,char name30;,char sex;,int,age;,float score;,char addr30;,;,注意,结构体类型定义,定义了一个特定的复合数据类型,是一个模型,并不分配内存。只有定义了结构体类型的变量,并存放数据时才分配内存,。,定义结构体变量有以下三种方法:,1,先定义结构体类型,再定义结构体变量,一般格式,;,;,8.1.2,结构体变量的定义,【,例,8.2,】,以例,8.1,定义的结构体类型,student,为例定义结构体变量。,struct,student,int,no;,char name30;,char sex;,int,age;,float score;,char addr30;,;,struct,student stu1,stu2;,注意,结构体变量所占内存长度是各成员所占内存长度之和。结构体变量,stu1,和,stu2,在内存中各占,69,字节,其各成员在内存中所占字节长度如,图,8-2,。,8.1.2,结构体变量的定义,8.1.2,结构体变量的定义,2,定义结构体类型的同时定义结构体变量,一般格式,struct,结构体名,类型说明符 成员名;,类型说明符 成员名;,变量名表列;,【,例,8.3,】,以例,8.1,定义的结构体类型,student,为例定义结构体变量。,struct,student,int,no;char name30;,char sex;,int,age;,float score;,char addr30;stu1,stu2;,8.1.2,结构体变量的定义,3,直接定义结构体变量,(,不出现结构体名,是无名结构体类型,),一般格式,struct,类型说明符 成员名;,类型说明符 成员名;,变量名表列;,【,例,8.4】,以例,8.1,定义的结构体类型,student,为例定义结构体变量。,struct,int,no;char name30;,char sex;,int,age;,float score;,char addr30;stu1,stu2;,三种方法中定义的结构体变量,stu1,,,stu2,都具有如,图,8-3,所示的存储结构。,注意,(1),结构体类型与结构体变量概念不同,不要混淆。其区别如同,int,类型与,int,型变量的区别一样。,(2),结构体变量中的成员,可以单独使用,其作用与地位相当于普通变量。,(3),结构体类型可以嵌套定义。结构体类型的成员也可以是一个结构体类型变量。,(4),结构体类型中的成员名,可以与程序中的变量同名,它们代表不同的对象,互不干扰。,8.1.2,结构体变量的定义,【,例,8.5】,若定义学生信息为结构体类型,其成员分别为:学号、姓名、性别、生日、成绩、地址。其中生日包括出生的年、月、日三个数据,这些数据可以用另一个结构体类型表示。,先定义,date,结构体:,struct,date,int,year;,int,month;,int,day;,;,再定义,student,结构体:,struct,student,int,no;,char name30;,char sex;,struct,date birthday;,float score;,char addr30;,stu1,stu2;,嵌套结构体变量,stu1,或,stu2,都具有如,图,8-4,所示的存储结构。,8.1.2,结构体变量的定义,8.1.3,结构体变量的引用,引用规则,结构体变量不能整体引用,只能引用变量成员,引用格式,结构体变量名,.,成员名,例如:引用例,8.2,中结构体变量,stu1,的,sex,成员格式为:,stu1.sex,。,嵌套的结构体,要通过多级的成员运算,对最低一级的成员进行引用。,引用格式,结构体变量,.,成员,.,子成员,.,最低一级子成员,例如:引用例,8.5,中结构体变量,stu1,的,birthday,成员的格式分别为:,stu1.birthday.year,stu1.birthday.month,stu1.birthday.day,初始化一般格式,结构体变量名,=,初始数据表,;,三种初始化形式,(1),形式一,struct,结构体名,类型说明符 成员名;,类型说明符 成员名;,;,struct,结构体名 变量名,=,初始数据表,;,8.1.4,结构体变量的初始化,(2),形式二,struct,结构体名,类型说明符 成员名;,类型说明符 成员名;,变量名,=,初始数据表,;,(3),形式三,struct,类型说明符 成员名;,类型说明符 成员名;,变量名,=,初始数据表,;,8.1.4,结构体变量的初始化,8.1.4,结构体变量的初始化,【,例,8.7,】,利用结构体类型定义结构体变量,并给结构体变量赋值并输出其值。,#include,main(),struct,student,int,no;,char*name;,char sex;,int,age;,float score;,char*,addr,;,stu1,stu2;,stu1.no=102;,stu1.name=Zhang Xing;,printf(input,sex and scoren);,scanf(%c,%f,stu2=stu1;,printf(Number,:%,dnName,:%sn,stu2.no,stu2.name);,printf(Sex,:%,cnScore,:%fn,stu2.sex,stu2.score);,前面已学到,一个结构体变量中可以存放一组数据(学号、姓名、成绩等)。,如果有,10,个学生的数据要参与运算,就应该定义长度为,10,的数组。,结构体数组,结构体数组中存放的,10,个元素类型相同,都是结构体类型,每个元素都是一组数据(学号、姓名、成绩等)。,8.2,结构体数组,8.2.1,结构体数组的定义,与结构体变量的定义相似,结构体数组的定义也包括,以下三种方法。,1,先定义结构体类型,再定义结构体数组,定义格式,类型说明符 成员名;,类型说明符 成员名;,.,;,;,【例8.9】以例8.1定义的结构体类型student为例定义结构体数组。,struct,student,int,no;,char name30;,char sex;,int,age;,float score;,char addr30;,;,struct,student stu10;,定义了一个结构体数组stu10,共有10个元素,stu0stu9。,8.2.1,结构体数组的定义,2定义结构体类型的同时定义结构体数组,定义格式,类型说明符,成员名,;,类型说明符,成员名,;,;,3直接定义结构体变量,定义格式,类型说明符,成员名,;,类型说明符,成员名,;,;,8.2.1,结构体数组的定义,初始化一般格式,结构体数组名数组长度n,初始数据表1,初始数据表2,,初始数据表n,;,【,例,8.10】,以例,8.1,定义的结构体类型,student,为例定义结构体数组并对之初始化。,struct,student,int,no;,char name30;,char sex;,int,age;,float score;,char addr30;,;,struct,student stu3=200608,Li,Xin,M,20,78.5,Xinjiang,,,200609,Liu,Yan,F,18,89.0,Xiamen,200612,Zhang Gang,M,19,60.5,Lintao,;,8.2.2,结构体数组的初始化,8.2.3,结构体数组元素的引用,引用格式,结构体数组名,元素下标,.,结构体成员名,例如:,打印输出例,8.10,中第二个数组元素的,name,成员:,printf(Name,:%sn,stu1.name);,结果输出为,Name:Liu,Yan,【,例,8.11,】,计算学生的平均成绩和不及格的人数。,#include,struct,student,int,no;,char name30;,char sex;,float score;,stu5=101,Li Ping,M,45,102,Zhang,Xing,M,62.5,103,He,Fang,F,92.5,104,Cheng,Lin,F,87,105,Wang,Ming,M,58;,main(),int,i,count,=0;float average,sum=0;,for(i,=0;i5;i+),sum+=,stui.score,;,if(stui.score,成员名,8.3.1,指向结构体变量的指针,【,例8.14,】,利用访问结构体变量成员的三种等价形式输出结构体变量成员值,。,#include,struct,student,int,no;,char name30;,char sex;,float score;,stu,=102,Zhang Xing,M,78.5,*,ptr,;,main(),ptr,=&,stu,;,printf(Number,=%,dnName,=%,sn,stu.no,stu.name,);,printf(Sex,=%,cnScore,=%,fnn,stu.sex,stu.score,);,printf(Number,=%,dnName,=%,sn,(*,ptr).no,(*,ptr).name,);,printf(Sex,=%,cnScore,=%,fnn,(*,ptr).sex,(*,ptr).score,);,printf(Number,=%,dnName,=%,sn,ptr,-,no,ptr,-name);,printf(Sex,=%,cnScore,=%,fnn,ptr,-,sex,ptr,-score);,8.3.1,指向结构体变量的指针,对于已定义的结构体数组,若用一个变量来存放该结构体数组在内存中的首地址,则该变量称为指向这个结构体数组的指针变量,。,【例8.15】以例8.1定义的结构体类型student为例,定义结构体数组及指向该数组的指针。,struct,student,int,no;,char name30;,char sex;,int,age;,float score;,char addr30;,;,struct,student*,ptr,mate,stu3=200608,Li,Xin,M,20,78.5,Xinjiang,,200609,Liu,Yan,F,18,89.0,Xiamen,2
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!