结构体共用体与枚举类型-西安交大

上传人:san****019 文档编号:70825730 上传时间:2019-01-18 格式:PPT 页数:36 大小:522.01KB
返回 下载 相关 举报
结构体共用体与枚举类型-西安交大_第1页
第1页 / 共36页
结构体共用体与枚举类型-西安交大_第2页
第2页 / 共36页
结构体共用体与枚举类型-西安交大_第3页
第3页 / 共36页
结构体共用体与枚举类型-西安交大_第4页
第4页 / 共36页
结构体共用体与枚举类型-西安交大_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《结构体共用体与枚举类型-西安交大》由会员分享,可在线阅读,更多相关《结构体共用体与枚举类型-西安交大(36页珍藏版)》请在金锄头文库上搜索。

1、9.1 结构体 9.2 结构体数组 9.3 结构体与指针 9.4 共用体 9.5 枚举类型 9.6 用typedef定义类型,第9章 结构体、共用体与枚举类型,9.1 结构体,结构体是将不同类型的数据根据需要组合成一个有机的整体,以便于引用。 这个整体是一个构造数据类型结构体类型,其中的数据是相互联系的。 如要存储一个学生的有关信息(学号、姓名、性别、年龄、住址),可采用结构体数据结构描述上述信息。,struct student int num; char name20; char sex; int age; char addr30; ;,定义一个结构体类型的一般形式为:,struct 结构体

2、名 成员表列;,是类型,不是变量名,对各成员都要进行类型说明; 成员名命名规则与变量名,定义结构体类型变量的方法,方法一:先定义结构体类型再定义变量 struct student int num; char name20; char sex; int age; char addr30; ; struct student student1, student2;,定义studet1和 sudent2为 struct student 类型变量,不能只指定一个变量为“struct型”而不指定结构体名,可用符号常量代表一个结构体类型,#define STUDENT struct student STUD

3、ENT int num; char name20; char sex; int age; char addr30; ;,这样,可直接用STUDENT 定义变量,如: STUDENT student1, student2; 此时,不必再写关键字struct,方法二:在定义类型的同时定义变量,struct student int num; char name20; char sex; int age; char addr30; student1, student2;,一般形式是: struct 结构体名 成员表列 变量名表列;,方法三:直接定义结构类型变量,其一般形式是: struct 成员表列

4、变量名表列;,此时,不出现结构体名,struct int num; char name20; char sex; int age; char addr30; student1, student2;,几点说明:,1.类型与变量是不同概念,不要混淆; 2.结构体中的成员,可以单独使用,其作用与地位相当于普通变量; 3.成员名可以与程序中的变量名相同,二者不代表同一对象。互不干扰。 4.在结构中,各成员都占有自己的内存空间,它们是同时存在的。一个结构变量的总长度等于所有成员长度之和。,Sizeof( )为一运算符,其功能是测试某种类型的变量在内存中所占用的字节数。,有: struct int i;

5、char c; float a; test; sizeof(test)的值是:7,struct date int month; int day; int year; ; Struct student int num; char name20; int age; struct date birthday; student1,student2;,Struct student int num; char name20; int age; struct int month; int day; int year; birthday; student1,student2;,5. 成员也可以是一个结构体变量

6、。例:,结构体类型变量的引用,引用一般形式为:结构体变量名.成员名 规则: 1. 不能将一个结构体变量作为一个整体进行赋值和输出;只能对其各个成员分别输出。 printf(“”,student1); printf(“ %d”, student1.num); 输出 10010,错!,正确!,2 .若成员本身又属一个结构体类型,只能对最低级的成员进行赋值或存取以及运算。 如:student1.birthday.year,3. 对成员变量可以象普通变量一样进行各种运算,如: sumage=student1.age+student2.age; 4. 可以引用成员的地址,也可以引用结构体变量的地址,如:

7、 scanf(“%d”,错!,输入student1.num的值,输出student1的首地址,Struct student int no; char name20; char sex; struct int year; int month; int day; birth; ; Struct student s;,设变量s中的“生日”是“1984年11月11日”,下列对“生日”的正确赋值方式是: A)year=1984;month=11;day=11; B)birth.year=1984;birth.month=11;birth.day=11 C)s.year=1984;s.month=11;s

8、.day=11 D)s.birth.year=1984;s.birth.month=11;s.birth.day=11;,练习:已知学生记录描述为:,结构体变量的初始化,在定义结构体类型变量的同时对其每个成员赋初值初始化。 struct student long int num; char name20; char sex; char addr20; a=9801,”Wang hong”,W,”2 Linggong Road”; main( ) printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,a.name,a.sex,a.addr);,运行结

9、果为: No.:9801 name:Wang hong sex:W address:2 Linggong Road,9.2 结构体数组 (每个数组元素都是一个结构体类型的数据),结构体数组的定义: struct student int num; char name20; char sex; int age; char addr30; ; struct studnt stu3;,也可直接定义: struct student int num; stu3; 或struct int num; stu3;,结构体数组的引用,1结构体数组元素中某一成员的引用 stu0.name 表示stu的第1个元素的n

10、ame成员项 stu4.age 表示stu的第5个元素的age成员项 2结构体数组元素的赋值 可将一个结构体数组元素赋给同一结构体数组中的另一个元素,或者赋给同一类型的变量。 stu1 = stu2; Stu4 = stu5; 注意:结构体数组元素的输入和输出只能将单个成员项进行输入和输出,而不能把结构体数组元素作为一个整体直接进行输入和输出。,结构体数组的初始化,struct student int num; char name20; char sex; int age; char addr30; stu3=111,”Li”,M,18,”Dalian”,; 也可采用:struct stude

11、nt int num; ; struct student stu=,;,结构体数组的初始化的一般形式是在 定义数组后面加上: =初值表列;,struct person char name20; int count; leader3=“Li”,0,”zhang”,0,”Liu”,0; main( ) int i, j; char leader_name20; for( i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,leaderj.name)= =0)leaderj.count+); for(i

12、=0;i3;i+) printf(“%5s:%dn”,leaderi.name,leaderi.count); ,判断是哪一位候选人,例题:设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。,计算学生的平均成绩和不及格的人数。,struct stu int num; char *name; char sex; float score; boy5= 101,“Li ping“,M,45, 102,“Zhang ping“,M,62.5, 103,“He fang“,F,92.5, 104,“Cheng ling“,F,87, 105,“Wang ming“,M,58, ;

13、,main() int i,c=0; float ave,s=0; for(i=0;i5;i+) s+=boyi.score; if(boyi.score60) c+=1; printf(“s=%fn“,s); ave=s/5; printf(“average=%fncount=%dn“,ave,c); ,9.3 结构体与指针,结构体变量的指针是该结构体变量所占据的内存段的起始地址 如: main( ) struct student long int num; char name20; char sex; ; struct student stu_1; struct student *p; p

14、=&stu_1;,stu.num=9901; strcpy(stu_1.name,”Li Min”); stu_1.sex=W; printf(“No.:%ldnname%snsex:%cn”, stu_1.num,stu_1.name,stu_1.sex); printf(“nNo.:%ldnname%sn sex:%cn”,(*p).num,(*p).name,(*p).sex); ,指针的定义,引用结构体成员的三种形式: 结构体变量名 . 成员名 (*p).成员名 p- 成员名,指向运算符。其优先级高于自增、自减运算符,试分析以下运算: p-n 得到p指向的结构体变量中的成员n的值 p-

15、n+ 得到p指向的结构体变量中的成员n的值, 用完后使它加1; +p-n 得到p指向的结构体变量中的成员n的值 使其先加1,成员运算符,指向结构体数组的指针,类似与多维数组中指向一维数组的指针。例: #include“string.h“ #include“stdio.h“ struct student int num; char name20; char sex; int age; ;,struct student stu3=10101, “Li Lin“, M, 18, 10102, “Zhang Fun“, M, 19, 10104, “Wang Min“, F, 20; void main() struct student *p; printf(“ No. Name Sex agen“); for (p=stu; pnum, p-name, p-sex, p-age); 注意:p定义为struct student类型,它只能指向这种类型的结构体变量,而不能指向该类型的成员(p=&stu.name是错误的)其它类型的结构体变量。,用结构

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

当前位置:首页 > 高等教育 > 大学课件

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