7_1结构体联合体.ppt

上传人:e****s 文档编号:75818786 上传时间:2023-03-05 格式:PPT 页数:48 大小:826.50KB
返回 下载 相关 举报
7_1结构体联合体.ppt_第1页
第1页 / 共48页
7_1结构体联合体.ppt_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《7_1结构体联合体.ppt》由会员分享,可在线阅读,更多相关《7_1结构体联合体.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第第第7 7 7 7章章章章 结构体、链表与文件系统结构体、链表与文件系统结构体、链表与文件系统结构体、链表与文件系统1 1 1 1结构体结构体联合体联合体枚举类型枚举类型12023/3/52C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整 型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union系统给定的系统给定的数据类型数据类型在根本在根本类型根类型根底上自底上自己定义己定义的的2023/3/53记录某班记录某班记录某班记录某班30303030名学生的姓名、

2、学号、性别、名学生的姓名、学号、性别、名学生的姓名、学号、性别、名学生的姓名、学号、性别、成绩、年龄成绩、年龄成绩、年龄成绩、年龄int ages30;int ids30;char sexes30;int ages30;int ids30;char sexes30;int ages30;int ids30;char sexes30;int ages30;int ids30;char sexes30;char names3020;float scores30char names3020;float scores30char names3020;float scores30char names30

3、20;float scores30 概念引入:概念引入:解决问题:记录某班所有学生的成绩解决问题:记录某班所有学生的成绩解决问题:记录某班所有学生的成绩解决问题:记录某班所有学生的成绩 3 3 3 3 名?名?名?名?30 30 30 30 名?名?名?名?float x,y,z;float scores30;结构体的定义及应用结构体的定义及应用结构体的定义及应用结构体的定义及应用2023/3/54思考思考 在程序里表示一个人姓名、年龄、性别在程序里表示一个人姓名、年龄、性别在程序里表示一个人姓名、年龄、性别在程序里表示一个人姓名、年龄、性别,怎么表示?怎么表示?怎么表示?怎么表示?想表示多个

4、人呢?想表示多个人呢?想表示多个人呢?想表示多个人呢?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?表8-1 某学校学生成绩管理表学号学号学号学号姓名姓名姓名姓名性别性别性别性别入学时间入学时间入学时间入学时间计算机原理计算机原理计算机原理计算机原理英英英英 语语语语数数数数 学学学学音音音音 乐乐乐乐1 1令狐冲令狐冲男男1999199990908383727282822 2林平之林平之男男1999199978789292888878783 3岳灵珊岳灵珊女女199919998989727298

5、9866664 4任莹莹任莹莹女女1999199978789595878790905 5 6 6 2023/3/55数组的解决方法数组的解决方法int int studentId30;studentId30;/*/*最多可以管理最多可以管理最多可以管理最多可以管理3030个学生个学生个学生个学生,每个学生的学号用数组的下标表示每个学生的学号用数组的下标表示每个学生的学号用数组的下标表示每个学生的学号用数组的下标表示*/charchar studentName3010;studentName3010;charchar studentSex302;studentSex302;int int tim

6、eOfEnter30;timeOfEnter30;/*/*入学时间用入学时间用入学时间用入学时间用intint表示表示表示表示*/int int scoreComputer30;scoreComputer30;/*/*计算机原理课的成绩计算机原理课的成绩计算机原理课的成绩计算机原理课的成绩*/int int scoreEnglish30;scoreEnglish30;/*/*英语课的成绩英语课的成绩英语课的成绩英语课的成绩*/int int scoreMath30;scoreMath30;/*/*数学课的成绩数学课的成绩数学课的成绩数学课的成绩*/int int scoreMusic30;sc

7、oreMusic30;/*/*音乐课的成绩音乐课的成绩音乐课的成绩音乐课的成绩*/2023/3/56intint studentId30=1,2,3,4,5,6;studentId30=1,2,3,4,5,6;charcharstudentName3010=studentName3010=令狐冲令狐冲令狐冲令狐冲,林平之林平之林平之林平之,岳灵珊岳灵珊岳灵珊岳灵珊,任莹莹任莹莹任莹莹任莹莹;charcharstudentSex302=studentSex302=男男男男,男男男男,女女女女,女女女女;intint timeOfEnter30=1999,1999,1999,1999;timeOf

8、Enter30=1999,1999,1999,1999;intint scoreComputer30=90,78,89,78;scoreComputer30=90,78,89,78;intint scoreEnglish30=83,92,72,95;scoreEnglish30=83,92,72,95;intint scoreMath30=72,88,98,87;scoreMath30=72,88,98,87;intint scoreMusic30=82,78,66,90;scoreMusic30=82,78,66,90;数组的解决方法数组的解决方法数组的解决方法数组的解决方法2023/3/5

9、7 数据的内存管理方式数据的内存管理方式 907889788392729572889887827866901234令狐冲林平之岳灵珊任莹莹男男女女1999199919991999数组的解决方法数组的解决方法数组的解决方法数组的解决方法数组可处理大量的同类型数据,数组中数组可处理大量的同类型数据,数组中数组可处理大量的同类型数据,数组中数组可处理大量的同类型数据,数组中的每一个元素都属于同一种数据类型的每一个元素都属于同一种数据类型的每一个元素都属于同一种数据类型的每一个元素都属于同一种数据类型2023/3/58 数据的内存管理方式数据的内存管理方式 9078897883927295728898

10、87827866901234令狐冲林平之岳灵珊任莹莹男男女女1999199919991999数组的解决方法数组的解决方法数组的解决方法数组的解决方法分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理结构显得比较零散,不容易管理2023/3/59希望的内存分配图希望的内存分配图 1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587902023/3/510结构体的解决方法结构体的解决方法 struct struct S

11、TUDENTSTUDENT int int studentID;studentID;/*/*每个学生的序号每个学生的序号每个学生的序号每个学生的序号*/char char studentName10;studentName10;/*/*每个学生的姓名每个学生的姓名每个学生的姓名每个学生的姓名*/char char studentSex4;studentSex4;/*/*每个学生的性别每个学生的性别每个学生的性别每个学生的性别*/intinttimeOfEnter;timeOfEnter;/*/*每个学生的入学时间每个学生的入学时间每个学生的入学时间每个学生的入学时间*/intintscoreC

12、omputer;scoreComputer;/*/*每个学生的计算机原理成绩每个学生的计算机原理成绩每个学生的计算机原理成绩每个学生的计算机原理成绩*/intintscoreEnglish;scoreEnglish;/*/*每个学生的英语成绩每个学生的英语成绩每个学生的英语成绩每个学生的英语成绩*/intintscoreMath;scoreMath;/*/*每个学生的数学成绩每个学生的数学成绩每个学生的数学成绩每个学生的数学成绩*/intintscoreMusic;scoreMusic;/*/*每个学生的音乐成绩每个学生的音乐成绩每个学生的音乐成绩每个学生的音乐成绩*/;structstruc

13、t STUDENTSTUDENT是一个类型是一个类型是一个类型是一个类型 structstruct STUDENTSTUDENT students4;students4;2023/3/511结构体结构体&结构体是结构体是结构体是结构体是一种一种一种一种构造构造构造构造数据类型数据类型数据类型数据类型&用途:把用途:把用途:把用途:把不同类型不同类型不同类型不同类型的数据组合成一个整体的数据组合成一个整体的数据组合成一个整体的数据组合成一个整体-自定义自定义自定义自定义数据类型数据类型数据类型数据类型结构体类型定义结构体类型定义结构体类型定义结构体类型定义struct 结构体名结构体名 类型标识

14、符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;成员类型可以是成员类型可以是根本型或构造型根本型或构造型struct是是关键字关键字,不能省略不能省略合法标识符合法标识符可省可省:无名结构体无名结构体分号不能省略分号不能省略2023/3/512例 struct student int num;char name20;char sex;int age;float score;char addr30;结构体类型定义描述结构的组织形式,不分配内存例如:要想把学生根本情况作为一个整体例如:要想把学生根本情况作为一个整体加以处理,比方:学号、姓名、性别、加以处理,比方:学号、姓名

15、、性别、年龄、成绩、住址等。必须定义结构体类型年龄、成绩、住址等。必须定义结构体类型例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2;结构体变量的定义结构体变量的定义结构体变量的定义结构体变量的定义1 1、先定义结构体类型,再定义结构体变量、先定义结构体类型,再定义结构体变量、先定义结构体类型,再定义结构体变量、先定义结构体类型,再定义结构体变量 一般形式:一般形式:一般形式:一般形式:struct 结构体名结构体名 类型标识符类型标识符

16、成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct 结构体名结构体名 变量名表列变量名表列;定义结构体变量之后为其分配内存单元namenumsexagescoreaddr4字节4字节20字节1字节4字节30字节.stu12023/3/514结构体的内存占用结构体的内存占用 int int 占用内存字节数占用内存字节数占用内存字节数占用内存字节数 =4=4 struct struct 类型用内存字节数类型用内存字节数类型用内存字节数类型用内存字节数 =?=?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?stru

17、ctstruct number number shortshort i;i;/2/2 charchar ch;ch;/1/1 floatfloat f;f;/4/4 ;printf(%dn,sizeof(printf(%dn,sizeof(structstruct number);number);用运算符用运算符用运算符用运算符sizeofsizeof获得结构体大小获得结构体大小获得结构体大小获得结构体大小sizeofsizeof(变量或表达式变量或表达式变量或表达式变量或表达式)sizeofsizeof(类型类型类型类型)82023/3/515结构体的内存占用结构体的内存占用结构体所占的实际

18、空间一般是按照机器字长对齐的结构体所占的实际空间一般是按照机器字长对齐的与机器相关的,如与机器相关的,如32位系统:位系统:结构体类型大小结构体类型大小=(成员数据类型大小的和成员数据类型大小的和+3)/4*47+3/4*4=8i if fchchi ichchf f2 2、定义结构体类型的同时定义结构体变量、定义结构体类型的同时定义结构体变量、定义结构体类型的同时定义结构体变量、定义结构体类型的同时定义结构体变量一般形式:一般形式:一般形式:一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列变量名表列;例 str

19、uct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;3 3、直接定义结构体变量、直接定义结构体变量、直接定义结构体变量、直接定义结构体变量一般形式:一般形式:一般形式:一般形式:struct 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列变量名表列;例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;用用无名结构体无名结构体直接定义直

20、接定义变量变量只能一次只能一次2023/3/518说明说明说明说明结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同类型类型类型类型:不分配内存;不分配内存;不分配内存;不分配内存;变量变量变量变量:分配内存分配内存分配内存分配内存结构体类型是一个模型,类似系统给定的根本类型比方结构体类型是一个模型,类似系统给定的根本类型比方结构体类型是一个模型,类似系统给定的根本类型比方结构体类型是一个模型,类似系统给定的根本类型比方intint、float float 等类型,只是结构体类型是用户自定义的而已。等类型,只是结构体类型是用

21、户自定义的而已。等类型,只是结构体类型是用户自定义的而已。等类型,只是结构体类型是用户自定义的而已。结构体可嵌套结构体可嵌套结构体可嵌套结构体可嵌套结构体成员名与程序中变量名可相同,不会混淆结构体成员名与程序中变量名可相同,不会混淆结构体成员名与程序中变量名可相同,不会混淆结构体成员名与程序中变量名可相同,不会混淆例 struct date int month;int day;int year;struct student int num;char name20;struct date birthday;stu;numnamebirthdaymonthdayyear 结构体变量的引用结构体变量

22、的引用结构体变量的引用结构体变量的引用 引用规那么引用规那么引用规那么引用规那么 结构体变量不能整体引用结构体变量不能整体引用结构体变量不能整体引用结构体变量不能整体引用,只能引用变量成员只能引用变量成员只能引用变量成员只能引用变量成员 可以将一个结可以将一个结可以将一个结可以将一个结构体变量赋值给另一个结构体变量构体变量赋值给另一个结构体变量构体变量赋值给另一个结构体变量构体变量赋值给另一个结构体变量 结构体嵌套时结构体嵌套时结构体嵌套时结构体嵌套时逐级引用逐级引用逐级引用逐级引用成员(分量)运算符优先级:1结合性:从左向右引用方式:引用方式:引用方式:引用方式:结构体变量名结构体变量名结构

23、体变量名结构体变量名.成员名成员名成员名成员名例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;printf(“%d,%s,%c,%d,%f,%sn”,stu1);()stu1

24、=101,“Wan Lin”,M,19,87.5,“DaLian”;()例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu2=stu1;()例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;2023/3/520 结构体变量的初始

25、化结构体变量的初始化结构体变量的初始化结构体变量的初始化形式一:形式一:形式一:形式一:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct 结构体名结构体名 结构体变量结构体变量=初始数据初始数据;例 struct student int num;char name20;char sex;int age;char addr30;struct student stu1=112,“Wang Lin,M,19,“200 Beijing Road;2023/3/523定义自己的类型名定义自己的类型名 struct struct

26、studentstudent student1,student2;student1,student2;/*/*可以可以可以可以*/student student student1,student2;student1,student2;/*/*不可以不可以不可以不可以*/typedeftypedef structstruct studentstudent STUD STUD;STUD STUD student1,student2;student1,student2;/*/*可以可以可以可以!*/!*/typedef为一种为一种已存在已存在的的类型定义一个类型定义一个新名字新名字STUD与与str

27、uct student类型是类型是同义词同义词struct student int num;char name20;char sex;int age;float score;char addr30;结构体数组结构体数组结构体数组结构体数组结构体数组的定义结构体数组的定义结构体数组的定义结构体数组的定义struct student int num;char name20;char sex;int age;struct student stu30;numnamesexagenumnamesexagestu0stu132B结构体数组初始化结构体数组初始化结构体数组初始化结构体数组初始化例 struc

28、t int num;char name20;char sex;int age;stu=,;顺序初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin,M,20,101,“Li Gang,M,19,110,“Liu Yan,F,19;分行初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Li

29、u Yan”,F,19;全部初始化时维数可省结构体数组引用结构体数组引用结构体数组引用结构体数组引用引用方式:引用方式:引用方式:引用方式:结构体数组名结构体数组名结构体数组名结构体数组名 下标下标下标下标.成员名成员名成员名成员名 struct student int num;char name20;char sex;int age;str3;stu1.age+;strcpy(stu0.name,”ZhaoDa”);Str0.name=“ZhaoDa 例例 统计候选人选票统计候选人选票#include struct person char name20;int count;leader3=“

30、Li,0,“Zhang,0,Wang“,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=0;i成员名成员名结构体变量名结构体变量名.成员名成员名指向运算符指向运算符优先级优先级:1:1结合方向:从左向右结合方向:从左向右#includemain()struct student long int num;char name20;char sex;float

31、 score;stu1,*p;p=&stu1;stu1.num=89101;strcpy(stu1.name,Li Lin);p-sex=M;p-score=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu1.sex,p-score);例例 int n;int *p=&n;*p=10;n=10struct student stu1;struct student *p=&stu1;stu1.num=101;(*p).num=101运行结果运行结果:No:89101Name:Li Lin sex:MScore89.5指

32、向结构体数组的指针指向结构体数组的指针指向结构体数组的指针指向结构体数组的指针struct student int num;char name20;char sex;int age;stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,Wang Min,F,20;main()struct student*p;for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1stu3相当于相当于p=&stu0;2023/3/5297.1.4 结构体与函数结构体与函数 用结构体变量作参数用结

33、构体变量作参数用结构体变量作参数用结构体变量作参数-值传递值传递值传递值传递,效率低,效率低,效率低,效率低 用结构体变量的成员作参数用结构体变量的成员作参数用结构体变量的成员作参数用结构体变量的成员作参数-值传递值传递值传递值传递 用指向结构体变量或数组的指针作参数用指向结构体变量或数组的指针作参数用指向结构体变量或数组的指针作参数用指向结构体变量或数组的指针作参数-地址传递地址传递地址传递地址传递2023/3/530struct date int year;int month;int day;void func(struct date p)p.year=2000;p.month=5;p.d

34、ay=22;main()struct date d;d.year=1999;d.month=4;d.day=23;printf(“%d,%d,%dn,d.year,d.month,d.day);func(d);printf(“%d,%d,%dn,d.year,d.month,d.day);1999,4,231999,4,23结构体结构体结构体结构体变量变量变量变量做函数参数做函数参数做函数参数做函数参数值传递值传递2023/3/531struct date int year;int month;int day;void func(struct date*p*p)p-p-year=2000;p-

35、p-month=5;p-p-day=22;main()struct date d;d.year=1999;d.month=4;d.day=23;printf(“%d,%d,%dn,d.year,d.month,d.day);func(&d);printf(“%d,%d,%dn,d.year,d.month,d.day);1999,4,232005,5,222005,5,22结构体结构体结构体结构体指针指针指针指针做函数参数做函数参数做函数参数做函数参数指针做函数形参指针做函数形参实参必须为地址值实参必须为地址值2023/3/533struct date int year;int month;i

36、nt day;struct datestruct date func(struct date p p)p.p.year=2000;p.p.month=5;p.p.day=22;return p;return p;main()struct date d;d.year=1999;d.month=4;d.day=23;printf(“%d,%d,%dn,d.year,d.month,d.day);d=func(d);printf(“%d,%d,%dn,d.year,d.month,d.day);1999,4,232005,5,222005,5,22结构体变量结构体变量结构体变量结构体变量做函数做函数

37、做函数做函数返回值返回值返回值返回值2023/3/534向函数传递结构体向函数传递结构体 向函数传递结构体的完整结构向函数传递结构体的完整结构复制整个结构体成员的内容,多个值复制整个结构体成员的内容,多个值复制整个结构体成员的内容,多个值复制整个结构体成员的内容,多个值函数内对结构内容的修改不影响原结构函数内对结构内容的修改不影响原结构函数内对结构内容的修改不影响原结构函数内对结构内容的修改不影响原结构内容传递更直观,但内容传递更直观,但内容传递更直观,但内容传递更直观,但开销大开销大开销大开销大 向函数传递结构体的首地址向函数传递结构体的首地址用用用用结构体数组结构体数组结构体数组结构体数组

38、/结构体指针结构体指针结构体指针结构体指针做函数参数做函数参数做函数参数做函数参数仅复制结构体的首地址,一个值仅复制结构体的首地址,一个值仅复制结构体的首地址,一个值仅复制结构体的首地址,一个值修改结构体指针所指向的结构体的内容修改结构体指针所指向的结构体的内容修改结构体指针所指向的结构体的内容修改结构体指针所指向的结构体的内容指针传递效率高指针传递效率高指针传递效率高指针传递效率高2023/3/535struct类型的特点类型的特点 是一个普通的类型是一个普通的类型是一个普通的类型是一个普通的类型 可以定义该类型的变量、数组、指针可以定义该类型的变量、数组、指针可以定义该类型的变量、数组、指

39、针可以定义该类型的变量、数组、指针 可以做函数的参数类型和返回值类型可以做函数的参数类型和返回值类型可以做函数的参数类型和返回值类型可以做函数的参数类型和返回值类型 它的成员可以是任意类型它的成员可以是任意类型它的成员可以是任意类型它的成员可以是任意类型 根本类型、数组、指针、结构体、共用体根本类型、数组、指针、结构体、共用体根本类型、数组、指针、结构体、共用体根本类型、数组、指针、结构体、共用体 structstruct类型的变量类型的变量类型的变量类型的变量 两个结构体变量之间可以相互赋值两个结构体变量之间可以相互赋值两个结构体变量之间可以相互赋值两个结构体变量之间可以相互赋值 所以做为函

40、数的参数时,是传值调用所以做为函数的参数时,是传值调用所以做为函数的参数时,是传值调用所以做为函数的参数时,是传值调用 可以取地址可以取地址可以取地址可以取地址&不可直接参与算术和比较运算不可直接参与算术和比较运算不可直接参与算术和比较运算不可直接参与算术和比较运算 面向对象和数据库是面向对象和数据库是面向对象和数据库是面向对象和数据库是structstruct思想的开展思想的开展思想的开展思想的开展2023/3/5367.2 7.2 联合体联合体联合体联合体UnionUnion姓名姓名name性别性别sex年龄年龄age婚姻状况婚姻状况婚姻状况婚姻状况标记标记未婚未婚 已婚已婚离婚离婚配配偶

41、偶子子女女年年 月月日日2023/3/537&构造数据类型构造数据类型构造数据类型构造数据类型,也叫共用体也叫共用体也叫共用体也叫共用体&用途:使几个不同类型的变量共占一段内存用途:使几个不同类型的变量共占一段内存用途:使几个不同类型的变量共占一段内存用途:使几个不同类型的变量共占一段内存(相互覆盖相互覆盖相互覆盖相互覆盖)联合体类型定义联合体类型定义联合体类型定义联合体类型定义union 联合联合体名体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;例 union data int i;char ch;float f;类型定义类型定义不分配内存不分配内存7

42、.2 7.2 联合体联合体联合体联合体UnionUnion2023/3/5387.2 联合体联合体Unionstructstruct number number shortshort i;i;charchar ch;ch;floatfloat f;f;0 x0037b00unionunion number number shortshort i;i;charchar ch;ch;floatfloat f;f;printf(%dn,sizeof(struct number);printf(%dn,sizeof(struct number);i ichchf fi ichchf fprintf(%

43、dn,sizeof(union number);printf(%dn,sizeof(union number);联合体类型变量占用的存储联合体类型变量占用的存储空间由占有最大存储区的成空间由占有最大存储区的成员决定员决定2023/3/5417.2 联合体联合体Union0 x0037b00 同一内存单元在每一瞬时只能存放其中一种类同一内存单元在每一瞬时只能存放其中一种类同一内存单元在每一瞬时只能存放其中一种类同一内存单元在每一瞬时只能存放其中一种类型的成员,互相覆盖型的成员,互相覆盖型的成员,互相覆盖型的成员,互相覆盖 ;起作用的成员是起作用的成员是起作用的成员是起作用的成员是最后一次存放最后

44、一次存放最后一次存放最后一次存放的成员的成员的成员的成员 不能作为函数参数不能作为函数参数不能作为函数参数不能作为函数参数 不能给联合体变量名直接赋值不能给联合体变量名直接赋值不能给联合体变量名直接赋值不能给联合体变量名直接赋值 不能初始化不能初始化不能初始化不能初始化 f f2023/3/543 如果一个变量只有如果一个变量只有如果一个变量只有如果一个变量只有几种可能的值,可以定义几种可能的值,可以定义几种可能的值,可以定义几种可能的值,可以定义为枚举为枚举为枚举为枚举类型类型类型类型enum enum 枚举量表枚举量表枚举量表枚举量表;enum weekdays Sun,Mon,Tue,W

45、ed,Thu,Fri,Sat;enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat;enum boolean True=1,False=0;enum boolean True=1,False=0;enum green,blue,yellow;enum green,blue,yellow;7.3 枚举类型枚举类型2023/3/544 编译器在编译时,给枚举类型定义中列举的每一个元编译器在编译时,给枚举类型定义中列举的每一个元编译器在编译时,给枚举类型定义中列举的每一个元编译器在编译时,给枚举类型定义中列举的每一个元素指定一个整型常量值。素指定一个整型常量值。素指定一

46、个整型常量值。素指定一个整型常量值。不是变量不能赋值,按顺序有固定的值不是变量不能赋值,按顺序有固定的值不是变量不能赋值,按顺序有固定的值不是变量不能赋值,按顺序有固定的值0 0,1-1-,也可改变其值。,也可改变其值。,也可改变其值。,也可改变其值。enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat;分别指定其元素的值为分别指定其元素的值为分别指定其元素的值为分别指定其元素的值为0 0、1 1、2 2、3 3、4 4、5 5、6 6 可以在定义枚举类型时,指定元素的值。可以在定

47、义枚举类型时,指定元素的值。可以在定义枚举类型时,指定元素的值。可以在定义枚举类型时,指定元素的值。enum boolean True=1,False=0 ;enum boolean True=1,False=0 ;说明枚举类型变量时,也可对其初始化。说明枚举类型变量时,也可对其初始化。说明枚举类型变量时,也可对其初始化。说明枚举类型变量时,也可对其初始化。weekdays day1=Fri;weekdays day1=Fri;7.3 7.3 枚举类型枚举类型枚举类型枚举类型2023/3/545例例:enum weekday workday;weekday=mon;printf(“%dn,wo

48、rkday)/*输出输出1*/假设假设:enum weekday sun=7,mon=1,tue,wed,thu,fri,sat workday;workday=tue;printf(“%dn,workday)/*输出输出2*/workday=2;/*整型数不能直接赋值给枚举变量,整型数不能直接赋值给枚举变量,类型不类型不匹配匹配*/workday=(enum weekday)2;/*可以赋值,相当于将顺序可以赋值,相当于将顺序号为号为2的枚举元素赋给的枚举元素赋给workday*/练习练习 设口袋中有红、黄、蓝、白、黑五种颜色的球五个,每设口袋中有红、黄、蓝、白、黑五种颜色的球五个,每次从口

49、袋中取出次从口袋中取出3 3个不同颜色的球,输出所有不同的取法个不同颜色的球,输出所有不同的取法.enum color red,yellow,blue,white,black;color i,j,k;int n=0;for(i=red;i=black;i=(color)(int)i+1)for(j=red;j=black;j=(color)(int)j+1)for(k=red;k=black;k=(color)(int)k+1)if(i!=j&i!=k&j!=k)print(i);print(j);print(k);运行结果:运行结果:1 red yellow blue 2 red yello

50、w white 3 red yellow black 4 red blue yellow 5 red blue white 6 red blue black 7 :2023/3/547这一章我们学习了这一章我们学习了 两种新的数据类型两种新的数据类型结构体、联合体、枚举类型结构体、联合体、枚举类型结构体、联合体、枚举类型结构体、联合体、枚举类型 几种重要的应用几种重要的应用结构体变量结构体变量结构体变量结构体变量结构体数组结构体数组结构体数组结构体数组结构体指针结构体指针结构体指针结构体指针用结构体数组或者结构体指针做函数参数用结构体数组或者结构体指针做函数参数用结构体数组或者结构体指针做函数

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

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁