9 结构体与共用体

上传人:豆浆 文档编号:24942306 上传时间:2017-12-09 格式:PPT 页数:86 大小:360.50KB
返回 下载 相关 举报
9 结构体与共用体_第1页
第1页 / 共86页
9 结构体与共用体_第2页
第2页 / 共86页
9 结构体与共用体_第3页
第3页 / 共86页
9 结构体与共用体_第4页
第4页 / 共86页
9 结构体与共用体_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《9 结构体与共用体》由会员分享,可在线阅读,更多相关《9 结构体与共用体(86页珍藏版)》请在金锄头文库上搜索。

1、第9章 结构体与共用体,C语言的数据类型,整型 int 基本类型 字符型 char 实型 float,double 枚举类型 enum数据类型 数组 构造类型 结构体 struct 共用体 union 指针 * 空类型 void,对于由多种不同类型的数据组成的数据实体,C语言可以用“结构体”数据类型来描述。每一个成员可以是一个简单数据类型,也可以是一个结构体数据类型。,9.1 定义一个结构的一般形式,9.1.1 数据类型与变量的区别数据类型只是说明了一个数据结构的模式,但不定义变量,并不要求分配实际的存储空间。变量具有三要素:名字、数据类型、值,变量要分配存储空间。例:int a=100 。,

2、9.1.2 结构体类型定义的一般形式结构体类型的定义形式为:struct 结构体类型名 成员说明列表;其中,花括号内的内容是该结构体类型的成员说明,每个成员说明的形式为:类型符 成员名;,例如,由年、月、日组成的结构体类型为:struct date int year; int month; int day;,又如,一个职工实体的结构体类型为:struct employee long no; /* 编号 */ char name10; /* 姓名 */ char sex; /* 性别 */ struct date birth; /* 出生日期 */ char education20; /* 文化

3、程度 */ double salary; /* 工资 */ long IDcard; /* 身份证号码 */ char addr40; /* 住址 */;,struct employee是程序设计者自己定义的类型,它与系统预定义的标准类型(如int,char,float等)一样,可以用来定义变量,使变量具有struct employee类型。例如: struct employee worker , workers20 ;,例9.1 分析以下程序,指出程序运行结果。void main() struct employee worker,workers20;printf(%d,%dn, sizeof

4、(struct date),sizeof(struct employee);printf(%d,%dn,sizeof(worker),sizeof(workers);,输出结果:6,9393,1860,结构体中的各成员变量占用独立的存储空间,结构体类型的大小是由各成员变量所占用的存储空间的总和来决定的。,9.2 结构体类型变量,9.2.1 结构体类型变量的定义1. 先定义结构体类型,再定义结构体类型变量struct employee worker, workman ;为使用方便,在程序开头,加上命令:#define WORK_TYPE struct employee,WORK_TYPElong

5、 no; char name10; char sex; struct date birth; char education20; double salary; long IDcard; char addr40; ;,然后就可以直接用WORK_TYPE定义变量,例如:WORK_TYPE teacher , doctor ;用这样的方法定义变量和用int、float定义变量的形式相仿,就不必再写关键字struct,如果程序规模比较大,可以将对结构体类型的定义集中放到一个以.h为扩展名的头文件中,哪个源文件需要用到此结构体类型,则可用#include命令将该头文件包含到本文件中,这样做便于结构体类型

6、的装配、修改及使用。,2.在定义结构体类型的同时定义结构体变量struct employeelong no; char name10; char sex; struct date birth; char education20; double salary; long IDcard; char addr40; teacher , doctor ;,一般形式:struct 结构体类型名 成员说明表列变量名表列;,3.直接定义结构体类型变量,structlong no; char name10; char sex; struct date birth; char education20; doub

7、le salary; long IDcard; char addr40; teacher , doctor ;,一般形式:struct 成员说明表列变量名表列;,这种形式虽然简单,但不能在再需要时,使用所定义的结构体类型。,以上三种方法中定义的结构体变量teacher,doctor都具有下图所示的结构。,9.2.2 结构体变量的使用,引用一个结构体变量有两种方式:通过结构体变量名和通过指向结构体的指针变量。 ”.”和”-”两种符号。1. 由结构体变量名引用其成员结构体变量名.成员名例如:teacher.no = 124260 ;如果成员本身又是一个结构则必须逐级找到最低级的成员才能使用。例如:

8、teacher.birth.year = 11 ;,2. 由指向结构体的指针变量引用结构体成员指针变量名-成员名例如,有如下的结构体变量的定义:struct node int x ; double y ;s , t , *p ;s.x = 6 ; s.y = 80.5;p = p-y = 78.4,6,80.5,s,11,78.4,t,p,9.2.3 结构体变量的初始化,例如:struct smail char name12; char addr40; long zip ; long tel ;teacher=“Li Ming” , “Blue Road 18” , 333403 , 8466

9、611 ;,注意,不能写成以下的形式:struct smail char name12= Li Ming; char addr40 = Blue Road 18; long zip = 333403; long tel = 8466611;teacher ;也不允许直接对结构体变量赋一组常量:teacher=Li Ming , Blue Road 18 , 333403 , 8466611 ;,例9.2 分析下列程序,指出程序的输出结果。void main()struct smailchar name12 ;char addr40 ;long zip ;long tel ;teacher2 ,

10、 teacher1=Li Ming , Blue Road 18 , 333403 , 8466611 ;teacher2 = teacher1 ;printf(%s,%sn , teacher2.name , teacher2.addr ) ;printf(%ld,%ldn , teacher2.zip , teacher2.tel );,输出结果:Li Ming , Blue Road 18333403 , 8466611,若结构体的成员中另有一个结构体类型的变量,则初始化时仍然要对各个基本成员赋予初值。,struct date int year ; int month ; int day

11、 ; ;,struct person char name12 ; struct date birth ; char sex ; long tel ; ;,struct person doctor = Zhang Hong, 1980 , 11 , 4 , F , 8466611 ;,9.2.4 结构体变量成员的输入与输出,例如,若有一个结构体变量:struct smailchar name10 ;char addr15 ;long zip ;teacher=Li Ming , Blue Road 18 , 333403 ;此时,以下两条语句是错误的:scanf(“%s” , teacher)

12、;printf(“%sn” , teacher ) ;,用下面的语句来完成对结构体变量的输入/输出是否可以呢? printf(“ %s , %s , %ld n” , teacher );scanf(“ %s , %s , %ld “ , teacher ) ;输出teacher变量,应该使用如下方式:printf( “ %s , %s , %ld n “ , teacher.name , teacher.addr , teacher.zip ) ;输入teacher变量的各成员值,则用:scanf( “ %s %s %ld “ , teacher.name , teacher.addr ,

13、,例9.3 阅读下面程序,掌握结构体类型变量的定义及使用方法。,例9.4 试利用结构体类型描述年、月、日,输入一个日期,统计该日期是本年度第几天。,(2010.3)设有定义:struct complex int real,unreal; data1=1,8,data2;则以下赋值语句中错误的是A)data2=data1;B)data2=(2,6);C)data2.real=data1.real;D)data2.real=data1.unreal;,B,9.3 结构体类型数组,9.3.1 结构体数组的定义1先定义结构体,再定义结构体数组例如,struct employee workers50,2

14、在定义结构体的同时,定义结构体数组struct employeelong no; char name10; char sex; struct date birth; char education20; double salary; long IDcard; char addr40; workers50 ;,3直接定义结构体数组而不定义结构体名struct long no; char name10; char sex; struct date birth; char education20; double salary; long IDcard; char addr40; workers50 ;,

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号