第11章结构体与共用体.ppt
《第11章结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《第11章结构体与共用体.ppt(59页珍藏版)》请在三一文库上搜索。
1、2019/3/11,1,第十一章 结构体与共用体,结构体的定义 结构体的初始化 访问结构体成员 结构体和函数,构造的数据类型,2019/3/11,2,2、定义结构的同时定义结构变量: struct student studend1, student2;(变量表列),3、直接定义结构变量: struct studend1, student2;,注意 (1)类型与变量是不同的概念; (2)对结构中的成员可以单独使用; (3)成员可以是结构变量;,2019/3/11,3,11.1 概述,结构:一种构造类型数据 (一条记录) 不同类型的数据组合成一个整体,以便引用,为什么引入结构型数据?,结构的定义:
2、struct student int num; char name20; char sex; int age; float score; char addr30; ;,struct student stu;,2019/3/11,4,11.2 定义结构体类型变量的方法,结构体类型的形式: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; :;,这个结构就是一种数据类型 结构体类型许多种,关键字,2019/3/11,5,成员可以是结构变量,struct date int month; int day; int year; ; struct student int num; cha
3、r name20; struct date birthday; char addr30 ; student1,student2;,num,name,birthday,month,day,year,2019/3/11,6,11.3 结构体变量的引用,结构体变量不能整体引用,只能引用其成员,1) 结构体变量中成员的引用方式 结构体变量名.成员名 student1.num (“.”是成员运算符,优先级最高),3)成员可以像普通变量一样进行各种运算. student2.score= student1.score; student1.age+;,例如:student1.num = 10010;,2019
4、/3/11,7,11.4 结构体变量的初始化,在定义时初始化(eg11.1),struct student long int num; char name20; char sex; char addr20; a=89031,“Li Lin“,M,“123 Beijing Road“;,仅在定义时可整体初始化,a.num=89031; a.sex=M;,a;,name如何赋初值?,2019/3/11,8,11.5 结构体数组,1 )定义结构体数组 将结构体定义中的变量定义为数组即可,struct student int num; char name20; char sex; int age; f
5、loat score; char addr30; ; struct student stu3;,2019/3/11,9,2 )结构体数组的初始化,struct student stu3= 10101,“LiLin“,M,18,87.5,“123 Beijing“, 10102,“zhangfun“,M,19,99,“123 Shanghai“, 10104,“Wang Min“,F,20,78.5,“123 Nanjing“;,struct student int num; char name20; char sex; int age; float score; char addr30; ;,
6、2019/3/11,10,3)结构体数组的应用举例 例 11.2 对候选人得票的统计程序。有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人的得票结果。,2019/3/11,11,#include #include struct person char name20; int count; leader3=“Li“,0,“Zhang“,0,“Fun“,0;,void main() int i,j; char leader_name20; for(i=1;i=5;i+) scanf(“%s“,leader_name); for(j=0;j3;j+) if(strcmp(leader_
7、name,leaderj.name)=0) leaderj.count+; printf(“n“); for(i=0;i3;i+) printf(“%5s:%dn“,leaderi.name,leaderi.count);,2019/3/11,12,11.6 指向结构体类型数据的指针,结构体变量的指针是该变量所占内存区域的起始地址。,1) 指向结构体变量的指针, struct student stu1; struct student *stu1Ptr; stu1Ptr= ,(1)结构体变量.成员名 (2)(*p).成员名 (3) p- .成员名,2019/3/11,13,#include vo
8、id main() struct student long int num; char name20; char sex; float score; ;/ stu_1 =89031,“Li Lin“,M,89.5; struct student stu_1; struct student *p; p=,eg11.3,2019/3/11,14,2)指向结构体数组的指针,例 11.4,#include struct student int num; char name20; char sex; int age; stu3=10101,“Li Lin“,M,18, 10102,“Zhang Fun“
9、,M,19, 10104,“Wang Min“,F,20; void main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age); ,2019/3/11,15,3)用结构体变量和指向结构体的指针作函数参数,把结构传递给函数有三种方式: 单个成员 整个结构 指向结构的指针,1、成员传递:用结构变量成员作为实参(值传递) 例如:对于上面定义的结构变量stu_1有四个成员。其中任何一个都可以做实参。 void main() prin(stu_1.num); : ,2019/3/11,16,2、结构传递(全体传递,多值传递): 用结构变量作
10、实参 将结构变量所占的内存单元内容全部顺序传递给形参(值传递),由于采用值传递内存开销大、在被调函数中改变的形参值不能返回主调用函数,因此在使用上很不方便。 eg11.5.c,3、传引用调用(地址传递): 定义结构指针变量并以此指针作为实参 从而完成将结构变量的指针传给函数。主调函数和被调函 数共用一段内存空间。 eg11.6.c,传递数组(自动实现传引用调用)和传递结构不同; 用指针作函数参数能提高程序运行效率,有时节约内存。,2019/3/11,17,11.8 共用体 构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) 共用体类型定义 定义形式:,union 共用
11、体名 类型标识符 成员名; 类型标识符 成员名; . ;,例 union data int i; char ch; float f; ;,类型定义不分配内存,2019/3/11,18,形式一: 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;,共用体变量的定义,共用体变量定义分配内存, 长度=最长成员所占字节数,共用体变量任何时刻 只有一个成员存
12、在,2019/3/11,19,共用体变量引用 引用方式:,例 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;
13、a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; (),2019/3/11,20,结构体与共用体 区别: 存储方式不同,联系: 两者可相互嵌套,2019/3/11,21,例 结构体中嵌套共用体 eg11.12,struct int num; char name10; char sex; char job; union int class; char position10; category; person2;,2019/3/11,22,11.9 枚举类型,如果一个变量只有几种可能的值,可定义为枚举类型。 一、枚举类型定义 定义的一般形式为: enum 枚举
14、名 枚举值表 ; 在枚举值表中应罗列出所有可用值,这些值也称为枚举元素,被说明为该“枚举”类型的变量取值不能超过定义的范围 例如: enum weekday sun,mon,tue,wed,thu,fri,sat ;,2019/3/11,23,枚举变量的定义同结构体相同,有三种形式 enum weekday sun,mou,tue,wed,thu,fri,sat ; enum weekday a,b,c; 或者: enum weekday sun,mou,tue,wed,thu,fri,sat a,b,c; 或者: enum sun,mou,tue,wed,thu,fri,sat a,b,c;
15、,2019/3/11,24,二、赋值和使用 1.枚举值(枚举元素)是常量,不能在程序中用赋值语句再对它赋值 例如: sun=5; 错误 mon=2; 错误,2019/3/11,25,2.枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2 例如: sun的值是0,mon的值是1,2019/3/11,26,3.枚举值可以用来作判断比较 按其在定义时的顺序号比较 例如: enum weekday sun,mon,tue,wed,thu,fri,sat a; sunmon if( asun ),2019/3/11,27,4.整数不能直接赋给枚举变量 例如: enum weekda
16、y sun,mou,tue,wed,thu,fri,sat a; a=2; 错误 在赋值前应进行强制类型转换 a=(enum weekday)2; a=tue;,2019/3/11,28,11.10 用typedef定义类型 功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;,例 typedef int INTEGER;,类型定义语句关键字,已有数据类型名,用户定义的类型名,例 typedef float REAL;,类型定义后,与已有类型一样使用,例 INTEGER a,b,c; REAL f1,f2;,说明: 1.typedef 没有创造新数据类
17、型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同,define typedef 预编译时处理 编译时处理 简单字符置换 为已有类型命名,2019/3/11,29,用typedef定义结构体: typedef struct int year; int month; int day; DATE; 声明新类型名DATE代表指定的结构体类型 DATE birthday;,2019/3/11,30,typedef定义的一般形式为: typedef 原类型名 新类型名 新类型名一般用大写表示,2019/3/11,31,typedef定义类型步骤 按定义变量方法先
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 结构 共用
链接地址:https://www.31doc.com/p-2250907.html