070-结构体、联合体与枚举类型.ppt

上传人:e****s 文档编号:85458447 上传时间:2023-04-11 格式:PPT 页数:72 大小:83KB
返回 下载 相关 举报
070-结构体、联合体与枚举类型.ppt_第1页
第1页 / 共72页
070-结构体、联合体与枚举类型.ppt_第2页
第2页 / 共72页
点击查看更多>>
资源描述

《070-结构体、联合体与枚举类型.ppt》由会员分享,可在线阅读,更多相关《070-结构体、联合体与枚举类型.ppt(72页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、结构体、联合体与枚举类型主要内容 n结构体n结构体的说明和定义n结构体成员的引用与结构体变量的初始化n结构体数组n结构体指针n结构体在函数间的传递n结构体指针型和结构体型函数n结构体嵌套n联合体n枚举类型一、结构体的说明和定义n结构体:C语言中的一种构造类型,通常是由不同数据类型的数据组成的集合体。n结构体与数组不同,数组是具有相同数据类型的数据组成的集合体。n结构体成员:构成结构体的数据,又称为结构体元素。每个成员具有不同名字与数据类型必要时也可具有相同的数据类型。n实例:学生记录,包括学号、姓名、性别等数据。n结构体的成员是通过其名字来引用的,而不像数组元素那样通过下标来引用。n结构体的作

2、用:n为处理复杂的数据结构提供了手段。n为函数间传递不同类型的参数提供了便利。n对数据结构较为复杂的大型程序提供了方便。结构体的说明n格式:存储类型 struct 结构体名 数据类型 结构体成员名1;数据类型 结构体成员名2;.;n结构体成员可以是简单变量、数组、指针、结构体、联合体等。n例:struct date int year;int month;int day;int yearday;结构体变量的定义三种方式n在结构体说明的同时定义结构体变量。n如:struct example char*name;int age;gao,zhang;n直接定义结构体变量。n如:struct char*

3、name;int age;gao,zhang;n未给出结构体名n把定义和说明分开。n如:struct example char*name;int age;struct example gao,zhang;n结构体变量占用内存的大小可用sizeof()运算来求出。二、结构体成员的引用与结构体变量的初始化 结构体成员的引用n一般格式:n结构体变量名.成员名 n“.为成员运算符,其结合性为从左到右。n例:struct example long int id;char*name;char address100;gao;各成员的引用:gao.idgao.namegao.address 或 gao.add

4、ressi结构体变量的初始化n结构体变量的初始化:在定义结构体变量的同时,对其成员变量赋初值。n一般格式:struct 结构体名 结构体变量名=初始数据;struct date int year;int month;int day;char monthname4;;struct date date1=2007,9,1,Sept;n【例】把一个学生的信息放在一个结构体变量中,然后输出这个学生的信息。n【例】输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。三、结构体数组 结构体数组的定义n一般格式:存储类型 struct 结构体名 结构体数组名表达式1.表达式n;结构体数组的

5、初始化n一般格式:存储类型 struct 结构体名 结构体数组名表达式1.表达式n=初始数据;结构体数组的应用举例n【例】有3个候选人,每个选民只能投票选一人。要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人的得票结果。结构体数组的应用举例n【例】有N个学生的信息(包括学号、姓名、成绩),要求按照成绩的上下顺序输出各学生的信息。四、结构体指针n结构体指针:指向结构体数据的指针。结构体指针及其定义n格式:存储类型 struct 结构体名 *结构体指针名;n例如:static struct example*pexample;n结构体指针存放结构体首地址,其运算规那么同一般指针。通过指针

6、引用结构体成员n格式1:(*结构体指针名).成员名n格式2:结构体指针名-成员名n【例】通过指向结构体变量的指针变量输出结构体变量中成员的信息。n【例】有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。五、结构体在函数间的传递n结构体变量在函数间的传递n两种方式:n地址复制方式:实参为结构体变量的地址,形参为相应的结构体类型指针。n数据复制方式:实参、形参均为相应的结构体变量。n结构体数组在函数间的传递n在传递结构体数组时,通常实参为数组名或指针,形参为指针或数组。n【例】有N个结构体变量stu,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3

7、门课程成绩和平均成绩)。六、结构体型和结构体指针型函数结构体型函数n结构体型函数:返回值为结构体数据的函数。n定义格式:struct 结构体名 函数名(形参表)形参说明;内部数据说明语句;执行语句;n说明格式:struct 结构体名 函数名();n【例】假设有一个学生表,给定一个学生的学号,输出其有关信息。结构体指针型函数n结构体指针型函数:返回值为结构体数据的地址的函数。n定义格式:struct 结构体名 *函数名(形参表)形参说明;内部数据说明语句;执行语句;n说明格式:struct 结构体名 *函数名();n【例】假设有一个学生表,给定一个学生的学号,输出其有关信息。七、结构体嵌套n结构

8、体嵌套:结构体的某个成员的类型又是一个结构体。struct date int year;int month;int day;struct person char id6;char name30;char sex;struct date birthday;stu;nbirthday为struct date类型,具有month、day和year三个成员。n递归结构体:结构体的某个成员的类型又是该结构体本身。n例:struct example int data;struct example *next;n嵌套结构体类型变量成员的引用格式:n结构体变量名.外层成员名.内层成员名n结构体指针名-外层成员

9、名.内层成员名n如:struct add int post;char addr100;char tel8;struct person char name30;struct add wadd;struct add hadd;struct person Li;struct person *pman;Li.name pmanname pman hadd.postpmanwadd.post pmanwadd.tel八、联合体n联合体是一种类似于结构体的构造型数据类型,准许不同类型和不同长度的数据共享同一块存储空间。n联合体类型变量所占用的空间,在程序运行时的不同时刻,可维持不同类型和不同长度的数据。在

10、任何时刻,只有一个成员变量的值有意义。n联合体实质上采用了覆盖技术,准许不同类型的数据互相覆盖。联合体的说明n格式:union 联合体名 类型标识符 成员名1;类型标识符 成员名n;n例:union area char c_data;short s_data;long l_data;联合体变量的定义n说明与定义分开union 联合体名 类型标识符 成员名1;类型标识符 成员名n;union 联合体名 变量名表;n例如:union uniontype int a;long b;union uniontype my_data;n定义与说明合在一起。union 联合体名 数据类型标识符 成员名1;数

11、据类型标识符 成员名n;变量名表;n例如:union uniontype int a;long b;my_data;n定义和说明合在一起,但缺省联合体名。union 数据类型标识符 成员名1;数据类型标识符 成员名n;变量名表;n例如:union int a;long d;my_data;n联合体变量所占用的存储空间,由其占用空间最多的成员决定。n结构体与联合体可以互相嵌套。n例如:union uniontype int i;float f;struct structtype short s;long l;struct sutype char c;union uniontype u;;unio

12、n ustype int i;struct structtype st;联合体变量成员的引用n联合体变量成员的引用类似结构体变量,也是利用运算符“和“.。n例如:union uniontype int i;char c;my_data;union uniontype *p;p=&my_data;引用方式:my_data.imy_data.cp-ip-cn联合体变量与结构体变量的区别:n结构体变量的所有成员都同时驻留在该结构体变量所占用的空间中,而对于联合体变量,仅有一个成员驻留在该联合体变量所占用的空间中。n结构体变量的所有成员都可以初始化,而对于联合体变量,只能初始化其中的一个成员。n【例】

13、建立教师和学生登记表,其中包括识别号、姓名、身份和职称。假设身份是“student,那么职称一栏填年级;假设身份是“teacher,那么职称栏填职称。九、枚举类型 n枚举类型是一种数据类型。对那些只可能取有限的某几种值的数据,可以定义为枚举类型数据。n典型的枚举类型数据:n星期:星期一、星期二、星期日n性别:男、女枚举类型的说明n格式:enum 枚举名元素名1,元素名2,元素名n;n例如:/该枚举类型只准许取12种值 enum month Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec;/该枚举类型只准许取7种值enum weekday Sun,

14、Mon,Tue,Wed,Thu,Fri,Sat;n枚举类型说明中的元素作为常量名处理,不是变量名。这些常量依序分别为0、1、n-1。n如:nenum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat;n其中,各枚举元素的值分别为0、1、2、3、4、5、6。n枚举元素是常量,不是变量,不能对它赋值。n如:nsun=0;mon=1;错n枚举元素的值也可在定义时指定。对于没有指定值的元素,其取值原那么仍按所处的顺序取。n如:nenum weekday Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;n其中,Tue是2,Wed是3,Sat是6。枚举类型变量的定义n

15、枚举类型变量的定义也有三种方式:n说明与定义合一。如:enum weekday Sun,Mon,Tue day;n无枚举类型名。如:enum Sun,Mon,Tue day;n说明与定义分开。如:enum weekday Sun,Mon,Tue;enum weekday day;n可用枚举变量进行判断或比较操作。n如:nenum flag true,false my_flag;n.nif(my_flag=true)n.n一个整数不能直接赋给枚举变量,要先进行强制类型转换才能赋值。n如:nenum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat workday;nwork

16、day=6;错nworkday=(enum weekday)6;对n workday=Sat;n【例】口袋中有红、黄、蓝、白、黑5种颜色的球假设干个。每次从口袋中先后取出个球,求得到3种不同色的球的可能取法,输出每种排列的情况。十、自定义类型n自定义类型即类型定义,用于给已存在的数据类型指定别名或重新命名。n一般格式:ntypedef oldtype newtype_list;n例如:ntypedef int INTEGER;/INTEGER为整形int nint a,b;n INTEGER a,b;n自定义类型的优点n增强程序的可读性和可移植性。typedef char*STRING;/STRING为字符指针类型STRING p,s10 ;/p为字符指针变量,s为指针数组typedef struct student char *name;int number;STU;/STU为struct student结构体类型 nSTU stu1;/stu1拥有name和number两个成员typedef int NUM10;/NUM为整型数组类型NUM n;/n为整型数组类型变量 typedef int (*POINTER)();/POINTER为函数指针类型POINTER p1,p2;/p1和p2为POINTER类型的指针变量

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 工程图纸

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com