




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结构体、联合体与枚举类型,主要内容,结构体结构体的说明和定义结构体成员的引用与结构体变量的初始化结构体数组结构体指针结构体在函数间的传递结构体指针型和结构体型函数结构体嵌套联合体枚举类型,一、结构体的说明和定义,结构体:C语言中的一种构造类型,通常是由不同数据类型的数据组成的集合体。结构体与数组不同,数组是具有相同数据类型的数据组成的集合体。,结构体成员:构成结构体的数据,又称为结构体元素。每个成员具有不同名字与数据类型(必要时也可具有相同的数据类型)。实例:学生记录,包括学号、姓名、性别等数据。结构体的成员是通过其名字来引用的,而不像数组元素那样通过下标来引用。,结构体的作用:为处理复杂的数据结构提供了手段。为函数间传递不同类型的参数提供了便利。对数据结构较为复杂的大型程序提供了方便。,结构体的说明,格式:存储类型 struct 结构体名 数据类型 结构体成员名1; 数据类型 结构体成员名2; .;结构体成员可以是简单变量、数组、指针、结构体、联合体等。,例:struct date int year; int month; int day; int yearday;,结构体变量的定义(三种方式),在结构体说明的同时定义结构体变量。如: struct example char *name; int age; gao,zhang;,直接定义结构体变量。如:struct char *name; int age;gao,zhang;未给出结构体名,把定义和说明分开。如:struct example char *name; int age;struct example gao,zhang;,结构体变量占用内存的大小可用sizeof()运算来求出。,二、结构体成员的引用与结构体变量的初始化,结构体成员的引用,一般格式:结构体变量名.成员名 “.”为成员运算符,其结合性为从左到右。,例:struct example long int id; char *name; char address100; gao;各成员的引用:gao.address 或 gao.addressi,结构体变量的初始化,结构体变量的初始化:在定义结构体变量的同时,对其成员变量赋初值。 一般格式:struct 结构体名 结构体变量名=初始数据;,struct date int year; int month; int day; char monthname4;;struct date date1=2007,9,1,Sept;,【例】把一个学生的信息放在一个结构体变量中,然后输出这个学生的信息。,【例】输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。,三、结构体数组,结构体数组的定义,一般格式:存储类型 struct 结构体名 结构体数组名表达式1 .表达式n;,结构体数组的初始化,一般格式:存储类型 struct 结构体名 结构体数组名表达式1 .表达式n=初始数据;,结构体数组的应用举例,【例】有3个候选人,每个选民只能投票选一人。要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人的得票结果。,结构体数组的应用举例,【例】有N个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。,四、结构体指针,结构体指针:指向结构体数据的指针。,结构体指针及其定义,格式:存储类型 struct 结构体名 *结构体指针名;例如:static struct example *pexample;,结构体指针存放结构体首地址,其运算规则同一般指针。,通过指针引用结构体成员,格式1:(*结构体指针名).成员名格式2:结构体指针名-成员名,【例】通过指向结构体变量的指针变量输出结构体变量中成员的信息。,【例】有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。,五、结构体在函数间的传递,结构体变量在函数间的传递两种方式:地址复制方式:实参为结构体变量的地址,形参为相应的结构体类型指针。数据复制方式:实参、形参均为相应的结构体变量。,结构体数组在函数间的传递在传递结构体数组时,通常实参为数组名(或指针),形参为指针(或数组)。,【例】有N个结构体变量stu ,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。,六、结构体型和结构体指针型函数,结构体型函数,结构体型函数:返回值为结构体数据的函数。定义格式:struct 结构体名 函数名(形参表)形参说明; 内部数据说明语句; 执行语句;说明格式:struct 结构体名 函数名();,【例】假设有一个学生表,给定一个学生的学号,输出其有关信息。,结构体指针型函数,结构体指针型函数:返回值为结构体数据的地址的函数。定义格式:struct 结构体名 *函数名(形参表)形参说明; 内部数据说明语句; 执行语句;说明格式:struct 结构体名 *函数名();,【例】假设有一个学生表,给定一个学生的学号,输出其有关信息。,七、结构体嵌套,结构体嵌套:结构体的某个成员的类型又是一个结构体。,struct date int year;int month;int day;struct person char id6;char name30;char sex;struct date birthday; stu;birthday为struct date类型,具有month、day和year三个成员。,递归结构体:结构体的某个成员的类型又是该结构体本身。例:struct example int data; struct example *next;,嵌套结构体类型变量成员的引用格式:结构体变量名.外层成员名.内层成员名结构体指针名-外层成员名.内层成员名如:stu.birthday.month,struct add int post;char addr100;char tel8;struct person char name30; struct add wadd; struct add hadd; ;struct person Li; struct person *pman;,L Li.hadd.post Li.wadd.post Li.wadd.addrpmanname pman hadd.postpmanwadd.post pmanwadd.tel,八、联合体,联合体是一种类似于结构体的构造型数据类型,准许不同类型和不同长度的数据共享同一块存储空间。联合体类型变量所占用的空间,在程序运行时的不同时刻,可维持不同类型和不同长度的数据。在任何时刻,只有一个成员变量的值有意义。联合体实质上采用了覆盖技术,准许不同类型的数据互相覆盖。,联合体的说明,格式:union 联合体名 类型标识符 成员名1; 类型标识符 成员名n;,例:union area char c_data; short s_data; long l_data;,联合体变量的定义,说明与定义分开union 联合体名 类型标识符 成员名1; 类型标识符 成员名n; ;union 联合体名 变量名表;,例如:union uniontype int a; long b; ;union uniontype my_data;,定义与说明合在一起。union 联合体名 数据类型标识符 成员名1; 数据类型标识符 成员名n;变量名表;,例如:union uniontype int a; long b; my_data;,定义和说明合在一起,但缺省联合体名。union 数据类型标识符 成员名1; 数据类型标识符 成员名n;变量名表;,例如:union int a; long d;my_data;,联合体变量所占用的存储空间,由其占用空间最多的成员决定。,结构体与联合体可以互相嵌套。例如:union uniontype int i; float f; ;struct structtype short s; long l; ;,struct sutype char c; union uniontype u;;union ustype int i; struct structtype st;,联合体变量成员的引用,联合体变量成员的引用类似结构体变量,也是利用运算符“”和“.”。,例如:union uniontype int i; char c; my_data;union uniontype *p; p = ,引用方式:my_data.imy_data.cp-ip-c,联合体变量与结构体变量的区别:结构体变量的所有成员都同时驻留在该结构体变量所占用的空间中,而对于联合体变量,仅有一个成员驻留在该联合体变量所占用的空间中。结构体变量的所有成员都可以初始化,而对于联合体变量,只能初始化其中的一个成员。,【例】建立教师和学生登记表,其中包括识别号、姓名、身份和职称。若身份是“student”,则职称一栏填年级;若身份是“teacher”,则职称栏填职称。,九、枚举类型,枚举类型是一种数据类型。对那些只可能取有限的某几种值的数据,可以定义为枚举类型数据。典型的枚举类型数据:星期:星期一、星期二、 星期日性别:男、女,枚举类型的说明,格式:enum 枚举名元素名1,元素名2,元素名n;例如:/ 该枚举类型只准许取12种值 enum month Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec;/ 该枚举类型只准许取7种值enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat;,枚举类型说明中的元素作为常量名处理,不是变量名。这些常量依序分别为0、1、n-1。如:enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat ;其中,各枚举元素的值分别为0、1、2、3、4、5、6。枚举元素是常量,不是变量,不能对它赋值。如:sun=0; mon=1; (错),枚举元素的值也可在定义时指定。对于没有指定值的元素,其取值原则仍按所处的顺序取。如:enum weekday Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat ;其中,Tue是2,Wed是3,Sat是6。,枚举类型变量的定义,枚举类型变量的定义也有三种方式:说明与定义合一。如:enum weekday Sun,Mon,Tue day;无枚举类型名。如:enum Sun,Mon,Tue day;说明与定义分开。如:enum weekday Sun,Mon,Tue ;enum weekday day;,可用枚举变量进行判断或比较操作。如:enum flag true,false my_flag;.if (my_flag = true) .,一个整数不能直接赋给枚举变量,要先进行强制类型转换才能赋值。如:enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat workday;workday = 6; (错)workday =(enum weekday)6; (对) workday = Sat;,【例】口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出个球,求得到3种不同色的球的可能取法,输出每种排列的情况。,十、自定义类型,自定义类型即类型定义,用于给已存在的数据类型指定别名(或重新命名)。 一般格式:typedef oldtype newtype_list; 例如:typedef int INTEGER; /INTEGER为整形(int) int a,b; INTEGER a,b;,自定义类型的优点增强程序的可读性和可移植性。,typedef char *STRING; /STRING为字符指针类型STRING p, s1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化肥行业节能减排合同协议
- 第2单元第3课《互联网的基本服务》说课稿 2024-2025学年青岛版(2010)初中信息技术七年级下册
- 关于内科护士个人工作总结
- 中医医师试题及答案
- 2025年环保型断桥铝合金门窗研发与生产合同
- 工地施工人员培训及技能考核协议
- 咖啡厅租赁合同及咖啡豆种植基地租赁管理协议
- 文化旅游工程款支付担保协议范本
- 高端车型全国销售总代理权许可合同
- 股东财务信息披露与管理合同
- 新版出口报关单模板
- 15ZJ001 建筑构造用料做法
- 员工工资条模板
- 新教科版科学六年级上册知识点
- 初中历史小论文现状分析与写作探讨
- 新疆地方史课件
- 一粒种子旅行
- GB/T 9124-2010钢制管法兰技术条件
- GB 4287-1992纺织染整工业水污染物排放标准
- 腰椎间盘突出症课件
- 桂阳县中小幼教师资格定期注册工作指南专家讲座
评论
0/150
提交评论