《结构体共同体和枚举型》由会员分享,可在线阅读,更多相关《结构体共同体和枚举型(20页珍藏版)》请在金锄头文库上搜索。
1、第7章 结构体、共同体和枚举型 主讲:李娟概 述有时需要将不同类型的数据组合成一个有机的整体 如:一个学生的信息:学号(num) 姓名(name) 性别(sex) 年龄(age)成绩(score) 家庭地址(addr) 10010limin gM2098zhengzhounum name sex age score addr结构体:结构体:若干个数据类型不同的(也可以相同)的数据项若干个数据类型不同的(也可以相同)的数据项 的一个组合的一个组合 结构体是一种数据结构,它需要用户根据自己 结构体是一种数据结构,它需要用户根据自己 的需要、按某种规则定义,即的需要、按某种规则定义,即定义结构体类型
2、定义结构体类型 7.1 结构体的定义及使用7.1.17.1.1、结构类型定义的一般形式是:、结构类型定义的一般形式是:structstruct 结构体名结构体名 数据类型数据类型 成员名成员名1 1;数据类型数据类型 成员名成员名2 2; 数据类型数据类型 成员名成员名n n; ; 如:如:structstruct student student long num long num;char name 20 char name 20;char sex;char sex;intint age age;float scorefloat score;char addr 30char addr 30;
3、 ;structstruct是关键字是关键字 ,表示是结构体,表示是结构体 类型;类型; studentstudent是结构体类型名是结构体类型名结构体中的各个成员结构体中的各个成员形式:形式:类型 成员名类型 成员名7.1.2 定义结构体变量的方法如:如: structstruct studentstudent long num long num;char name 20 char name 20;char sex;char sex;intint age age;float scorefloat score;char char addraddr 30 30; ; structstruct s
4、tudent student1,student2student student1,student2; ;1 1先声明结构体类型,再定义变量先声明结构体类型,再定义变量一般形式:一般形式:struct 结构体类型名成员表;struct 结构体类型名 变量名表;注意:注意:定义结构体变量后,系统为变量分配内存单元,定义结构体变量后,系统为变量分配内存单元, student1student1和和student2student2各占各占6868个字节,是各成员所占内存空间个字节,是各成员所占内存空间 的总和。的总和。7.1.2 定义结构体变量的方法如:如: structstruct studentst
5、udent long num long num;char name 20 char name 20;char sex;char sex;intint age age;float scorefloat score;char char addraddr 30 30; ; student1,student2student1,student2; ;2 2在声明结构类型的同时定义结构体变量在声明结构类型的同时定义结构体变量一般形式:一般形式:struct 结构体名成员列表;变量名表;7.1.2 定义结构体变量的方法如:如: structstruct long num long num;char name
6、 20 char name 20;char sex;char sex;intint age age;float scorefloat score;char char addraddr 30 30; ; student1,student2student1,student2; ;3 3利用无名结构类型定义变量利用无名结构类型定义变量一般形式:一般形式:struct 成员表;变量名表;7.1.2 定义结构体变量的方法一、类型与变量的区别:一、类型与变量的区别:类型是先定义结构体类型,然后定义变量。 类型是先定义结构体类型,然后定义变量。类型不分配空间,变量分配空间 类型不分配空间,变量分配空间 二、
7、结构体的嵌套定义二、结构体的嵌套定义结构体的成员又可以是结构体变量结构体的成员又可以是结构体变量 注意注意: :如:如:structstruct date date intint month; month;intint day; day;intint year; year; ;structstruct student student intint num; num;char name20; char name20;char sex; char sex;intint age; age;float score;float score;structstruct date birthday; date
8、 birthday;char addr20; char addr20; stu1;stu1;7.1.2 定义结构体变量的方法三、成员名与变量名可以相同三、成员名与变量名可以相同注意注意: :7.1.3 结构体变量的使用结构体成员的引用形式:结构体成员的引用形式:结构体变量名成员名结构体变量名成员名 成员运算符运算级别最高规则:规则: 、不能将结构体变量作为一个整体进行赋值、输出,只能对、不能将结构体变量作为一个整体进行赋值、输出,只能对 结构体中的各个成员分别进行赋值输入输出操作;结构体中的各个成员分别进行赋值输入输出操作;但允许将一但允许将一 个结构体变量直接赋给另一个具有相同结构的结构体变
9、量个结构体变量直接赋给另一个具有相同结构的结构体变量 如:如:student1.num=10000;student1.num=10000;student1.age=25; student1.age=25;student2=student1; student2=student1;7.1.3 结构体变量的使用规则:规则: 、如果是嵌套定义,用若干个成员运算符,一级一级地找到如果是嵌套定义,用若干个成员运算符,一级一级地找到 最低的一级成员。最低的一级成员。 如:如:student1.num;student1.num;student1student1.name;.name;student1stude
10、nt1.birthday.day;.birthday.day;student1student1.birthday.month;.birthday.month;student1student1.birthday.year;.birthday.year;7.1.3 结构体变量的使用规则:规则: 、结构体成员变量可以像普通变量一样使用、运算、结构体成员变量可以像普通变量一样使用、运算 如:如:student2.score=stustudent2.score=studentdent1.score;1.score;sum= stu sum= studentdent2.score+stu2.score+s
11、tudentdent1.score;1.score;stu studentdent1.age+;1.age+;+stu +studentdent1.age;1.age;、可以引用成员的地址,也可以引用结构体变量的地址可以引用成员的地址,也可以引用结构体变量的地址 .如:如:scanf(“%d”,1.age);输入 输入stustudentdent1.age1.age的值的值7.1.4 结构体变量的初始化和其它变量一样,在定义结构体变量时赋初值和其它变量一样,在定义结构体变量时赋初值 如:如: structstruct studentstudent long num long num;char
12、name 20 char name 20;char sex;char sex;intint age age;float scorefloat score;char char addraddr 30 30; who=991105,“Zhanghua”,M,20,87.5,”zhengzwho=991105,“Zhanghua”,M,20,87.5,”zhengz hou”;hou”;一般形式:一般形式:structstruct 结构体名结构体名 成员列表; 成员列表; 变量名变量名=初始数据表初始数据表 ;等价于:who.num= 991105;strcpy(who.name,“Zhanghua
13、”);991105;strcpy(who.name,“Zhanghua”);WWho.sexho.sex=M;who.scoreM;who.score=87.5;strcpy(who.addr,”zhengzhou”);=87.5;strcpy(who.addr,”zhengzhou”);7.1.5 结构体数组1 1、结构体数组的定义方法、结构体数组的定义方法结构体数组:数组中每个元素都是一个结构体类型的数据结构体数组:数组中每个元素都是一个结构体类型的数据 与定义结构体变量类似,只需说明其为数组即可与定义结构体变量类似,只需说明其为数组即可 structstruct student stud
14、ent intint num; num;char name20; char name20;char sex; char sex;intint age; age;float score;float score;structstruct date birthday; date birthday;char addr20; char addr20; structstruct student stu5;student stu5;structstruct student student intint num; num;char name20; char name20;char sex; char sex;intint age; age;float score;float score;structstruct date date birthday;birthday;char addr20; char addr20; stu5;stu5;structstruct intint num; num;char name20