第8章复合数据类型.ppt

上传人:本田雅阁 文档编号:2257923 上传时间:2019-03-12 格式:PPT 页数:34 大小:188.01KB
返回 下载 相关 举报
第8章复合数据类型.ppt_第1页
第1页 / 共34页
第8章复合数据类型.ppt_第2页
第2页 / 共34页
第8章复合数据类型.ppt_第3页
第3页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第8章复合数据类型.ppt》由会员分享,可在线阅读,更多相关《第8章复合数据类型.ppt(34页珍藏版)》请在三一文库上搜索。

1、第8章 复合数据类型,第8章 复合数据类型,81 结构类型,84 枚举类型,83 位段结构类型,82 联合类型,85 类型定义(typedef),复合类型(构造类型),由基本类型按一定的规律组合而成,C语言的复合数据类型包括,数组 结构类型 联合类型 枚举型 位段,8.1结构类型(struct),一.结构类型的定义,1. 结构类型定义的一般格式,struct 结构标识符 数据类型 成员1; 数据类型 成员2; : 数据类型 成员n; ;,例: struct student char name20; int age; float score; ;,关于结构类型定义的几点说明:,1)一个结构类型可

2、以包括若干个数据项,每个数据项都有一 种数据类型,称为结构成员。,2)结构的成员可以与程序中其它变量同名,也可以和另一个结构类型的成员同名。,3)结构类型定义的位置,可以在函数内部,也可以在函数外部,其作用域也与其定义的位置有关。结构类型有全局和局部之分。,2. 结构(变量)、结构数组、结构指针的定义,(1)直接定义(常用): 即在定义结构类型的同时定义;,例: struct employee char number5; char name10; int age; float wage; emp1, emp210, *emp3;,(2) 间接定义(常用) : 先定义结构类型,然后定义结构(变量

3、);,例: struct employee char number5; char name10; int age; float wage; ; struct employee emp1, emp210, *emp3;,(3) 一次性定义(不常用) :在定义结构类型的同时定义 结构,但结构类型无类型名。,例: struct char number5; char name10; int age; float wage; emp6, emp710, *emp8;,3. 嵌套结构和递归结构,(1)嵌套结构:一个结构的某些成员也是结构类型,例: struct date int year ; int mo

4、nth ; int day; ; struct employee char name20; struct date birthday; float salary; ;,(2)递归结构一个结构的某些成员与该结构属于同一类型,例: struct node int date; struct node *next ; ,4. 结构的存储分配,一个结构变量的所有成员在内存中占用连续的存储单元,例: struct date int year ; int month ; int day; struct employee char name10; struct date birthday; float sal

5、ary; p ;,p.name (10字节),p.birthday.year (2字节),p.birthday.month (2字节),p.birthday.day (2字节),p.salary (4字节),二. 结构成员的访问,结构成员访问的一般格式: 结构名.成员名 用指针访问结构成员: 指针名-成员名 (*指针名).成员名,运算符“-”和“.”都是访问结构成员运算符,并同处于 最高优先级,结合性也都是从左到右。,例: struct xy int x; float y; a, b,*c=,例: struct date int year ; int month ; int day; ; st

6、ruct employee char name20; struct date birthday; float salary; ;,嵌套结构成员的访问:,例 : struct employee p; strcpy(p.name, “zhangsan“); p.salary = 850; p.birthday.year = 1960; p.birthday.month =12; p.birthday.day = 25;,三. 结构成员的初始化,即:在定义结构变量的同时为每个成员赋初始化。 方法同数组,例: struct xy int x; float y; z=7, 3.6;,使用说明:,除初始化

7、外,不允许使用赋值语句直接对整个结构赋值。 但可以将一个结构直接赋值给另外一个同类型的结构。,例: struct xy a,b; a=10,1.5; (错) a.x=10; a.y=1.5; (对) b=a; (对),例1. 下列程序的运行结果是 .,main( ) struct node int x ; int y ; n1 , n2 , n3; struct node *p, *q, *s; p= ,8 16,#include struct sample int num; char color10; ; main( ) struct sample car5=101,“Green“, 201

8、,“Yellow“, 105,“Red“, 220,“Blue“, 309,“White“; struct sample *p; printf(“-number-color-n“); for (p=car;pnum , p-color);,例2. 下列程序的运行结果是 .,四.结构在函数间的传递,1. 结构在函数间的传递(虚实结合),#include struct sample int a,b;char *ch; ; void f1(struct sample parm) parm.a +=parm.b; parm.ch2 = x; printf(“%d %sn“, parm.a,parm.c

9、h); main() struct sample arg; arg.a=1000; arg.b=100; arg.ch =“abcd“; f1(arg); printf(“ %d %sn“, arg.a, arg.ch);,例3. 下列程序的运行结果是 .,1100 abxd 1000 abxd,#include struct sample int a,b;char *ch; ; void f1(struct sample *p) p-a +=p-b; p-ch2 = x; printf(“%d %sn“, p-a,p-ch); main() struct sample arg; arg.a=

10、1000; arg.b=100; arg.ch =“abcd“; f1(,例4. 下列程序的运行结果是 .,1100 abxd 1100 abxd,8.2 联合类型(union),是一种特殊的结构, 即:所有成员共享同一存储单元。,1. 联合类型的定义,union 联合类型名 类型 成员名1; 类型 成员名2; : 类型 成员名n; 联合变量名;,例: union data int i; char c; float f; a, b;,a.c,例: union data int i; char c; float f; a;,2. 联合型变量内存分配示意图,3. 联合与结构的比较 (P209),s

11、truct abc int a; char c2; b;,union xyz int a; char c2; d;,union ua int x; int y; w; w.x=20; w.y=50; printf(“%d,%d“,w.x,w.y);,例5. 下列程序段的执行结果是 .,50,50,8.4 枚举类型(enum),是指将变量的值一一列举出来,变量的取值仅限于列 举出来的值的范围内。,1. 枚举类型的定义,enum 枚举类型名 枚举元素列表 枚举变量名;,例: enum color red , blue, green, yellow, whitec1,c2;,说明: c1,c2是 e

12、num color型变量;, c1,c2的取值只能是枚举元素(red, blue, green, yellow,white)中的一个。,2. 枚举元素的值,枚举类型一经定义,则每个枚举元素就自动代表一个整数值,可以用在任意整型表达式中。,例:enum color red , blue, green, yellow, whitec1,c2;,则系统自动对枚举元素初始化: red 值为 0 yellow 值为 3 blue 值为 1 white 值为 4 green 值为 2,例:enum weekday sun=7, mon=1, tue, wed, thu, fri, sat workday;,则对枚举变量赋值: workday=sat; workday=(enum weekday)6;,(1)枚举元素可以用在任意整型表达式中,(2)变量的取值仅限于列举出来的值的范围内,不能 用输入方式赋值,3. 枚举总结,8.5 类型定义(typedef),是指用一个新的标识符代表已有的数据类型。,1. 类型定义的一般格式,typedef 已有的类型标识符 新类型标识符;,例: typedef float REAL; REAL x,y;,float x,y;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1