谭浩强版C++ 第八章 结构联合和枚举_第1页
谭浩强版C++ 第八章 结构联合和枚举_第2页
谭浩强版C++ 第八章 结构联合和枚举_第3页
谭浩强版C++ 第八章 结构联合和枚举_第4页
谭浩强版C++ 第八章 结构联合和枚举_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第七章第七章 结构体、共同体和枚举类型结构体、共同体和枚举类型 2定义:定义:将将不同种类型不同种类型的数据有序地的数据有序地组合在一起组合在一起,构,构造出一个造出一个新的数据类型新的数据类型,这种形式称为,这种形式称为结构结构体。体。结构体是多种类型组合的结构体是多种类型组合的数据类型数据类型。3struct 结构体名结构体名 成员列表成员列表 ;struct student int num; char name20; char sex; char addr30; ;结构体名结构体名关键字关键字不同数据不同数据类型组成类型组成的的成员成员 分号不能少。分号不能少。4student是一个类

2、型名,和系统提供的标准类型是一个类型名,和系统提供的标准类型(如如int、char、float等等)一样,可以用来定义变量。一样,可以用来定义变量。只不过结构体类型需要事先用户自己定义。只不过结构体类型需要事先用户自己定义。声明结构体类型的位置一般在文件的开头,在声明结构体类型的位置一般在文件的开头,在所有函数之前,以便本文件中的所有函数都能所有函数之前,以便本文件中的所有函数都能利用它来定义。但并不是语法要求,也可以在利用它来定义。但并不是语法要求,也可以在函数中或其它位置声明结构体变量。函数中或其它位置声明结构体变量。5定义结构体类型变量的方法定义结构体类型变量的方法一、先定义结构体类型再

3、定义变量名一、先定义结构体类型再定义变量名struct student int num; char name20; char sex; int age; float score; char addr30;C+定义方式:定义方式:student student1, student2;结构体类型名结构体类型名变量变量1变量变量2结构体类型只是一种数据结构体类型只是一种数据类型,不占内存空间,只类型,不占内存空间,只有定义结构体类型有定义结构体类型变量变量时时才开辟内存空间。才开辟内存空间。 C定义方式:定义方式: struct student student1,student2;6# define

4、 STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT student1,student2;凡是凡是STUDENT的地的地方都用方都用struct student 机械替换。机械替换。7二、在定义类型的同时定义变量二、在定义类型的同时定义变量struct student int num; char name20; char sex; int age; float score; char addr30; student1, studen

5、t2;struct struct 结构体名结构体名 成员列表成员列表 变量名列表;变量名列表; 紧接着定紧接着定义变量义变量8三、直接定义结构体类型变量三、直接定义结构体类型变量struct int num; char name20; char sex; int age; float score; char addr30; student1, student2;struct 成员列表成员列表 变量名列表;变量名列表; 不出现结构体名。不出现结构体名。虽然合法,但不建议虽然合法,但不建议使用这种方式。推荐使用这种方式。推荐使用第一种方式。使用第一种方式。92 2、在编译时,仅对、在编译时,仅对变

6、量变量分配空间,不对分配空间,不对类型类型分配空间。分配空间。3 3、结构体类型的变量在内存、结构体类型的变量在内存依照其成员的顺序依照其成员的顺序顺序排列,顺序排列,所占内存空间的大小是其全体成员所占空间的所占内存空间的大小是其全体成员所占空间的总和总和。要注。要注意存储字长意存储字长( (假设存储字长是假设存储字长是1616位位) )。numnamesexagescoreaddr1 1、不要误认为结构体都具有相同的结构,实际上每种结构、不要误认为结构体都具有相同的结构,实际上每种结构体类型都有自己的结构,用户可以自由定义。体类型都有自己的结构,用户可以自由定义。注意事项注意事项104 4、

7、结构体的成员可以是另一个结构体类型。、结构体的成员可以是另一个结构体类型。struct dateint year;int month;int day; ;struct studentint num;char name20;char sex;int age;date birthday;char addr30;成员类型成员类型成员名成员名numnamesexagebirthdayaddrmonthdayyear116 6、成员名可以与程序中的变量名相同、成员名可以与程序中的变量名相同, ,二者分占不同的内二者分占不同的内存单元存单元, ,互不干扰互不干扰. . 例如例如, ,在程序中仍可以定义变量

8、在程序中仍可以定义变量 int num;int num;5 5、对结构体中各个成员可以单独引用、赋值,其作用与变、对结构体中各个成员可以单独引用、赋值,其作用与变量等同。量等同。格式:变量名格式:变量名 . . 成员名成员名 student1 . numstudent1 . num12结构体类型变量的引用结构体类型变量的引用cinstudent1.num; student1.num=100;cinstudent1.num; student1.num=100;2 2、嵌套的结构体变量必须一级一级地逐层引用。、嵌套的结构体变量必须一级一级地逐层引用。student1.student1.birthd

9、ay.birthday.dayday=25;=25;3 3、结构体变量中的成员可以同一般变量一样进行运算。、结构体变量中的成员可以同一般变量一样进行运算。student1.birthday.day+; student1.score+=60;student1.birthday.day+; student1.score+=60;格式:变量名格式:变量名 . . 成员名成员名 “. . 是成员运算符是成员运算符, ,优先级最高。优先级最高。1 1、对结构体变量中成员值的访问、对结构体变量中成员值的访问13cinstudent1.num; coutstudent1.num; coutstudent1;

10、 coutstudent1; coutstudent1;14例子例子#includestruct Dateint month;int day;int year;struct Studentint num;char name20;char sex;Date birthday;float score;student1,student2=10002,WangLi,f,5,23,1982,89.5;对变量初始化,一一赋值对变量初始化,一一赋值15例子例子void main(void) student1=student2; coutstudent1.numendl; e

11、ndl; coutstudent1.sexendl; coutstudent1.birthday.month/student1.birthday.day/student1.birthday.yearendl; coutstudent1.scoreendl;16结构体数组结构体数组结构体数组中的结构体数组中的每个元素都是一个结构体类型的变每个元素都是一个结构体类型的变量量,其中包括该类型的各个成员。数组各元素在内,其中包括该类型的各个成员。数组各元素在内存中连续存放。存中连续存放。17一、结构体数组的定义一、结构体数组的定义struct student int num; char name20;

12、 char sex; int age; float score; char addr30; ;student stu30;struct student int num; char name20; char sex; int age; float score; char addr30; stu30;直接定义直接定义18二、结构体数组的初始化二、结构体数组的初始化struct student int num; char name20; char sex; stu3= 1011, Li Lin,M, 1012,Wang Lan,F, 1013,Liu Fang,F;struct student in

13、t num; char name20; char sex; stu = 1011,Li Lin,M, 1012,Wang Lan,F, 1013,Liu Fang,F;19struct student int num; char name20; char sex; stu3=1011, Li Lin,M,1012,Wang Lan,F, 1013,Liu Fang,F;struct student int num; char name20; char sex; ;student stu3=1011, Li Lin,M, 1012,WangLan,F, 1013,Liu Fang,F;20根据下

14、面的定义,能打印出字母根据下面的定义,能打印出字母M的语句是:的语句是: struct person char name9; int age; ;struct person class10= Jone,17, Paul,19, Mary,18, Adam,16 ;A) endl;B) 1endl;C) 1endl;D) 0endl;输出:输出:Adam输出:输出:d输出:输出:a输出:输出:M21课本例课本例7.2#include #include struct Person

15、 char name20; int count;设有设有3个候选人,最终只有个候选人,最终只有1人当选为领导。今有人当选为领导。今有10个人参加投票,从键盘先后输入个人参加投票,从键盘先后输入10个人所投的候选人的个人所投的候选人的名字,要求最后输出者三个候选人的得票结果。名字,要求最后输出者三个候选人的得票结果。22int main()Person leader3=Li,0,Zhang,0,Fun,0;int i,j;char leader_name20;for(i=0;ileader_name; for(j=0;j3;j+) if(strcmp(leader_name,leaderj.na

16、me)=0) leaderj.count+; coutendl;for(i=0;i3;i+):leaderi.count成员名成员名(指向运算符指向运算符)。p为指向结构为指向结构体变量的指针体变量的指针24结构体变量指针结构体变量指针int main() struct student int num; char *name; char sex; float score; student stu; student *p=&stu; stu.num=10301; =Wang Fun; stu.sex=f; stu.score=89.5;coutst

17、u.num stu.sex stu.scoreendl; cout(*p).num (*p).name (*p).sex (*p).scoreendl; return 0; 25共用体共用体C+语言中,允许语言中,允许不同的数据类型使用不同的数据类型使用同一存储区域同一存储区域,即,即同一存储区域由不同类型的变量共同表示。这种数据类型同一存储区域由不同类型的变量共同表示。这种数据类型就是共用体,也称为联合。就是共用体,也称为联合。union 共用体名共用体名 成员表列;成员表列; 变量表列;变量表列;union data int i; char ch; float f; a,

18、 b, c;union data a, b, c;这几个成员在共用体变量中存放在同一地址,相互覆盖,这几个成员在共用体变量中存放在同一地址,相互覆盖,其长度为最长的成员的长度其长度为最长的成员的长度。26共用体变量的引用共用体变量的引用不能整体引用共用体变量,只能引用变量中不能整体引用共用体变量,只能引用变量中的成员。的成员。a.i 表示为整型表示为整型a.ch 表示为字符型表示为字符型a.f 表示为符点型表示为符点型27共用体变量的特点共用体变量的特点1、共用体的空间在某一时刻只有一个成员在起作、共用体的空间在某一时刻只有一个成员在起作用。用。2、能够访问的共用体变量变量中最后一次被赋值、能

19、够访问的共用体变量变量中最后一次被赋值的成员,对一个新的成员赋值后原有的成员就失去的成员,对一个新的成员赋值后原有的成员就失去作用。作用。3、共用体变量不能在定义时赋初值。、共用体变量不能在定义时赋初值。4、共用体变量不能作为函数的参数或函数值,但、共用体变量不能作为函数的参数或函数值,但可使用指向共用体的指针变量。可使用指向共用体的指针变量。5、共用体可以作为结构的成员,结构体也可以作、共用体可以作为结构的成员,结构体也可以作为共用体的成员。为共用体的成员。28union un int i; double y;struct st char a10; union un b;coutsizeof

20、(struct st)endl;1829union un short int a; char c2; w;w.c0=A; w.c1=a;coutoctw.aendl; 低字节低地址低字节低地址高字节高地址高字节高地址aAw.c1w.c02000H2001H输出:输出:0605010 1 1 0 0 0 0 1 0 1 0 0 0 0 0 1a65 ?56 ?652000H2001H30void main(void) union EXAMPLE struct int x, int y; in; int a,b; e; e.a=1; e.b=2; e.in.x=e.a*e.a; e.in.y=e.b+e.b; coute.in.xte.in.ysun)6、枚举值可以进行加减一个整数、枚举值可以进行加减一个整数n的运算,得到其前后第的运算,得到其前后第n个元素的值。个元素的值。workday=sun;workday=(week)(workday+2);7、枚举值可以按整型输出其序号值。、枚举值可以按整型输出其序号值。workday=tue;coutworkday;235void main(void) enum te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论