第8章结构体与共用体(new).ppt

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

《第8章结构体与共用体(new).ppt》由会员分享,可在线阅读,更多相关《第8章结构体与共用体(new).ppt(34页珍藏版)》请在三一文库上搜索。

1、第8章 结构体与共用体,8.1 结构体类型的定义 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-自定义数据类型 结构体类型定义,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本型或构造型,struct是关键字, 不能省略,合法标识符 可省:无名结构体,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体类型定义描述结构 的组织形式,不分配内存,结构体类型定义的作用域,结构体实例,例 struct stud

2、ent int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,先定义结构体类型,再定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT st

3、u1,stu2;,8.2 结构体变量的定义,定义结构体类型的同时定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct int num; char name20; char sex; int age; float score; char addr30; st

4、u1,stu2;,用无名结构体直接定义 变量只能一次,直接定义结构体变量,说明 结构体类型与结构体变量概念不同 类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 结构体类型及变量的作用域与生存期,形式一:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1

5、=112,“Wang Lin”,M,19, “200 Beijing Road”;,结构体变量的初始化1,形式二:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,结构体变量的初始化2,形式三:,struct 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct int num;

6、char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,结构体变量的初始化3,引用规则 结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量 结构体嵌套时逐级引用,成员(分量)运算符 优先级: 1 结合性:从左向右,引用方式: 结构体变量名.成员名,8.2.2结构体变量的引用,结构体数组的定义 三种形式:,形式一: struct student int num; char name20; char sex; int age; ; stru

7、ct student stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,8.3 结构体数组,例 struct int num; char name20; char sex; int age; stu =,;,顺序初始化: struct student int num; char name20; char sex; int age; ; struct student stu =100,

8、“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19;,例 struct student int num; char name20; char sex; int age; stu =,;,结构体数组初始化,结构体数组的引用,引用方式: 结构体数组名下标.成员名 例如: stu1.age+;,struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char leader_name20; for(i=1;i=10;i+)

9、 scanf(“%s“,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,leaderj.name)=0) leaderj.count+; for(i=0;i3;i+) printf(“%5s:%dn“,leaderi.name,leaderi.count); ,例 统计后选人选票,8.4 结构体和函数,8.4.1 结构体作函数参数 8.4.2 返回值为结构体类型的函数,从键盘输入5名学生信息,用排序函数sore对学生按成绩降序排序,并输出排行榜。#include struct stud_type char name10; int num;

10、int score; ; struct stud_type s5; void sort(struct stud_type s );,结构体数组作函数参数,main() int i,j,k; printf(“n请输入 5 个学生的n姓名 学号 成绩 n“); for(i=0;iN;i+) scanf (“%s%d%d“, si.name, ,void sort(struct stud_type stu ) int i,k,j; struct stud_type t; for(i=0;iN-1;i+) k=i; for(j=i+1;jN;j+) if(stuk.scorestuj.score) k

11、=j; t=stui; stui=stuk; stuk=t; /*选择法排序*/,请输入 5 个学生的 姓名 学号 成绩 zhan 101 65 wang 102 80 cheng 103 79 qian 104 98 liu 105 68 排序结果如下 qian 104 98 wang 102 80 cheng 103 79 liu 105 68 zhan 101 65,返回值为结构体类型的函数,struct st_type input( ) struct st_type s0; return s0; ,构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) 共用体类型

12、定义 定义形式:,union 共用体名 类型标识符 成员名; 类型标识符 成员名; . ;,例 union data int i; char ch; float f; ;,类型定义不分配内存,8. 5 共用体,形式一: union data int i; char ch; float f; a,b;,形式二: union data int i; char ch; float f; ; union data a,b,c,*p,d3;,形式三: union int i; char ch; float f; a,b,c;,共用体变量的定义,共用体变量定义分配内存, 长度=最长成员所占字节数,共用体变

13、量任何时刻 只有一个成员存在,共用体变量引用 引用方式:,例 a.i=1; a.ch=a; a.f=1.5; printf(“%d”,a.i); (编译通过,运行结果不对),引用规则 不能引用共用体变量,只能引用其成员,共用体变量中起作用的成员是最后一次存放的成员,例 union int i; char ch; float f; a; a=1; (),不能在定义共用体变量时初始化,例 union int i; char ch; float f; a=1,a,1.5; (),可以用一个共用体变量为另一个变量赋值,例 float x; union int i; char ch; float f;

14、a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; (),例 将一个整数按字节输出,运行结果: i=60501 ch0=101,ch1=141 ch0=A,ch1=a,main() union int_char int i; char ch2; x; x.i=24897; printf(“i=%on“,x.i); printf(“ch0=%o,ch1=%on ch0=%c,ch1=%cn“, x.ch0,x.ch1,x.ch0,x.ch1); ,区别: 存储方式不同,联系: 两者可相互嵌套,结构体与共用体,例 结构体中嵌套共用体,struct int num

15、; char name10; char sex; char job; union int class; char position10; category; person2;,例共用体中嵌套结构体,机器字数据与字节数据的处理,struct w_tag char low; char high; ; union u_tag struct w_tag byte_acc; int word_acc; u_acc;,枚举类型也要先定义其类型,再定义该类型的变量。 枚举类型定义的一般形式是: enum 枚举类型标识符 枚举值名表; ; enum是枚举类型定义的关键字, 它与枚举类型标识符组成枚举类型名。枚

16、举值名表由以逗号分隔的若干个用户定义标识符组成, 由程序员命名。,8.6 枚举类型,枚举值名标识符由程序员自定义,分别代表不同枚举值,通常称为枚举常量。如: enum weekday sun, mon, tue, wed, thu, fri, sat ; 它定义了枚举类型enum weekday,该类型数据的取值范围是7个枚举值。在定义了类型之后,就可以用该类型来定义变量,如: enum weekday workday; 可将枚举类型定义和变量定义合并,如: enum weekday sun, mon, tue, wed, thu, fri, sat workday;,(1) 各枚举常量不是枚

17、举变量的成员, 而是它可能取的值。枚举常量是常量, 不允许对它进行赋值操作。 (2) C语言的枚举常量是有序的, 每个枚举常量对应一个固定的整数序号, 它取决于在定义时排列的次序, 第一个枚举常量的序号隐含为0, 以后顺序加1,可在枚举类型定义时显式指定枚举常量的序号。 如:enum fruit apple=5, pear, lemon, orange=2, peach t; 显式指定apple的序号为5, pear和lemon的序号分别为6和7, orange的序号为2, peach的序号为3。 不要误认为apple=5是给apple赋初值5,枚举常量与对应序号的类型不同, 它仅表示appl

18、e的序号为5,说明:,(3) 枚举变量取值只能是这几个枚举常量之一, 可将枚举常量赋给一个枚举变量, 但不能将一个整数赋给它。如: workday=sun; 正确 workday=7; 错误 (4) 可将整数强制类型转换为以它为序号的枚举常量,再赋值给枚举变量, 该整数值应在枚举序号范围内。 如: workday=(enum weekday)2; (5)在同一程序中所有定义的枚举常量不能重名,在同一程序中如果还定义了另一个枚举类型 enum star sun, 则因枚举常量重名出错。,功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;,例 typed

19、ef int INTEGER;,类型定义语句关键字,已有数据类型名,用户定义的类型名,例 typedef float REAL;,类型定义后,与已有类型一样使用,例 INTEGER a,b,c; REAL f1,f2;,说明: 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同,define typedef 预编译时处理 编译时处理 简单字符置换 为已有类型命名,8.7 typedef语句,typedef定义类型步骤 按定义变量方法先写出定义体 如 int i; 将变量名换成新类型名 如 int INTEGER; 最

20、前面加typedef 如 typedef int INTEGER; 用新类型名定义变量 如 INTEGER i,j;,例 定义数组类型 int a100; int ARRAY100; typedef int ARRAY100; ARRAY a,b,c;, int a100,b100,c100;,例 定义结构体类型 struct date int month; int day; int year; DATE;,例 定义结构体类型 typedef struct date int month; int day; int year; DATE;,类型定义可嵌套,typedef定义类型步骤,1. 结构体

21、类型及结构体变量 (1)结构体类型:不分配内存,不能赋值、存取、运算; (2)结构体变量:分配内存,可以赋值、存取、运算; 2. 结构体变量引用 (1)不允许对结构变量整体输入输出和除赋值外的各种运算 (2)对结构体的各成员可进行各种运算、赋值、输入输出。 3. 结构体与公用体 (1) 公用体变量它不能进行初始化; (2) 公用体是多种数据的覆盖存储, 不同的变量共占同一段内存, 任意时刻只存储一种数据, 而结构体中每个成员相互独立,各占各的存储单元; 4. 用typedef定义类型 用关键字typedef 定义某个类型的别名,用它可增强程序的通用性、灵活性及可读性。 5. 枚举类型 枚举类型定义的一般形式: enum 枚举类型名 枚举值名表 ; 枚举值名表: 以逗号分隔的若干个用户定义标识符,本章小 结,本章习题,习题与实验指导 P92,编程题 2,4,5 P91,填空题 1,3.,

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

当前位置:首页 > 其他


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