Top Banner
第 8 第 第第 第第第第第 8.1 第第第第 概概 : 概概概概概概概概概概概 概概 : 概概概概概概 ( 概概概概概 ) 概概概概概概概 8.2 第第第第第第 概 : 概 integer 概概概概 int typedef int integer 概概概概 : int a,b,c; 概 integer a,b,c; 概概概概 概 : 概 ul 概概概 unsigned long typedef unsigned long ul ( 概概概概 )
25

第 8 章 结构、联合和枚举

Mar 16, 2016

Download

Documents

lynsey

第 8 章 结构、联合和枚举. 8.1 类型定义 概念 : 由用户自己定义数据类型 方法 : 非结构型定义 ( 类型的引用 ) 和结构类型定义 8.2 非结构型定义 例 : 将 integer 也定义成 int typedef int integer 在程序中 : int a,b,c; 和 integer a,b,c; 作用相同 例 : 将 ul 定义为 unsigned long typedef unsigned long ul ( 以少代多 ). 8.3 结构 ( 结构类型定义 ) - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 第 8 章 结构、联合和枚举

第 8 章 结构、联合和枚举8.1 类型定义概念 : 由用户自己定义数据类型方法 : 非结构型定义 ( 类型的引用 ) 和结构类型定义8.2 非结构型定义例 : 将 integer 也定义成 int typedef int integer 在程序中 : int a,b,c; 和 integer a,b,c; 作用相同 例 : 将 ul 定义为 unsigned long typedef unsigned long ul ( 以少代多 )

Page 2: 第 8 章 结构、联合和枚举

8.3 结构 ( 结构类型定义 ) 把不同的数据类型或多个数据定义成一个结构 , 该结构 ( 类型 ) 称为结构体 .8.3.1 定义结构例如 , 定义一个”学生“属性的结构体。struct student { int num; char name[10]; int age; char sex; float score; char addr[30]; }m,n;

Page 3: 第 8 章 结构、联合和枚举

说明: 其中 student 是由用户定义的结构体类型名(在数据类型中有增加了一个类型)。 其中的成员称作域名。8.3.2 说明结构变量 ( 结构类型变量定义方法 )例:将 a,b,c 说明成 student 结构体类型方法一:用结构体类型进行说明struct student a,b,c

Page 4: 第 8 章 结构、联合和枚举

方法二:先用宏定义#define student struct studentstudent a,b,c;

方法三:定义结构体时就说明例:将 m, n 说明成 teacher 结构体类型struct teacher { char name[10]; int age; char sex; char addr[30]; } m,n;

Page 5: 第 8 章 结构、联合和枚举

说明: 1. 结构体中的成员称为域名或分量。 2. 结构体和宏定义常常以头文件方式使用。 3. 每一个成员需要进行类型说明。 4. 结构体中的成员名可以与普通变量名相同 , 但使用的方式不同。 5. 结构体中的成员还可以是另一个结构体变量。 6. 可以使用 sizeof() 函数测出每一个变量、类型( float 等)等占用内存的字节数。

Page 6: 第 8 章 结构、联合和枚举

8.3.3 结构体成员结构体中的成员还可以是另一个结构体变量struct pat { unsigned long zip; // 邮编 char *addr; // 地址 unsigned long tel; }; struct address_book { char *name; long num; pat depart; // 单位 pat home; // 家庭 }a;

Page 7: 第 8 章 结构、联合和枚举

8.3.4 访问结构体变量例 : address_book a, s [10] a.num a.name a.depart.num s[3].num s[3].home.tel

8.3.5 结构体变量的初始化 ( 赋值 )例 : 给变量赋值struct student { long int num; char name[10]; int age; char sex; }a={200705312, “zhang li”, 18, ‘w’};

Page 8: 第 8 章 结构、联合和枚举

例 : 给结构类型的数组变量赋值struct student { long int num; char name[10]; int age; char sex; } s[30]={{200205312,“zhangli”, },{2002}};

Page 9: 第 8 章 结构、联合和枚举

8.4 结构体类型的变量输出例:使用 scanf() 给结构体数组类型赋值,输入三个学生的有关信息,然后输出程序为:struct student { long int num; char name[10]; char sex; } s[3] ;

Page 10: 第 8 章 结构、联合和枚举

main(){int k; for(k=0; k<3;k++) { cin>>s[k].num; cin>>s[k].name; cin>>s[k].sex; }for(k=0; k<3;k++) { cout<<s[k].num<<”\n”; cout<<s[k].name”\n”; cout<<s[k].sex<<endl; }}

Page 11: 第 8 章 结构、联合和枚举

例:结构体嵌套的输入输出struct date { int year; int month; int day };struct student { long int num; char name[10]; struct date birthday; } s[3];

Page 12: 第 8 章 结构、联合和枚举

main(){int k; for(k=0; k<3;k++) { cin>>s[k].num; cin>>s[k].name; cin>>s[k].birthday.year; cin>>s[k].birthday.month; cin>>s[k]..birthday.day; }

Page 13: 第 8 章 结构、联合和枚举

for(k=0; k<3;k++) { cout<<s[k].num; cout<<s[k].name; cout<<s[k].birthday.year; cout<<s[k].birthday.month; cout<<s[k].birthday.day; }}

Page 14: 第 8 章 结构、联合和枚举

8.5 用结构指针变量代替结构体变量 struct student { long int num; char name[10]; char sex; } ; struct student a; 定义结构体变量 struct student *p; 定义结构体变量指针 p=&a; p->num 引用 a 中的成员(方法一) (*p).num 引用 a 中的成员(方法二)

Page 15: 第 8 章 结构、联合和枚举

8.6 用结构指针变量代替结构体数组变量 struct student { long int num; char name[10]; char sex; } ; struct student s[30]; struct student *p; p=s; p->num 引用某一元素中的 num 成员 (*p).num (p++)->num 引用某一元素中的 num 成员后指针指向下一个 ( 人 ) 数组元素 .

Page 16: 第 8 章 结构、联合和枚举

例 : 用结构体类型指针变量完成上题struct date { int year; int month; int day }struct student { int num; char name[10]; struct date birthday; }s[30];

Page 17: 第 8 章 结构、联合和枚举

main(){int k; struct student *p; p=s; for(k=0; k<3;k++,p++) { cin>>p->num; cin>>p->name; cin>>p->birthday.year; cin>>p->birthday.month; cin>>p->birthday.day; }

Page 18: 第 8 章 结构、联合和枚举

for(k=0; k<3;k++,p++) { cout<<p->num; cout<<p->name; cout<<p->birthday.year; cout<<p->birthday.month; cout<<p->birthday.day; }}

Page 19: 第 8 章 结构、联合和枚举

8.7 位域 位域是以二进制形式定义结构成员 , 使用多少定义多少。8.7.1 定义位域的方法 例 : struct student { char *name; unsigned int sex : 1; unsigned int age : 7; };

Page 20: 第 8 章 结构、联合和枚举

说明 :1. 在成员后使用 : n 即可 , n 指的是二进制位数。2. 使用位域和不使用位域差 2 个字节。3. 1 位可表示 1 或 0, 8 位可以表示 0 到

128 。8.7.2 使用位域成员的方法与普通成员一样 , 注意 1 和 0 即可表示逻辑值。8.7.3 使用位域注意事项1. 位域成员必须是 unsigned int 。2. 位域成员所占位数可任意。3. 如果从新的字节开始,可以使用: unsigned int 0 ;

Page 21: 第 8 章 结构、联合和枚举

8.8 联合(共用体)8.8.1 联合的概念与定义 不同的数据可以共用存储单元例 : union un{ int n; char name; float x;}其特点是所有成员具有相同的首地址

Page 22: 第 8 章 结构、联合和枚举

8.8.2 联合体变量的定义 联合体类型名 变量名8.8.3 联合体的使用通过变量使用例 : un a,b; a.n=2003; a.name=”hello” b.x=3.1415962

Page 23: 第 8 章 结构、联合和枚举

8.8.4 联合体类型的特点• 共享内存单元• 每一时刻只能有一个成员起作用• 最后一次赋值的成员有效• 各成员的首地址相同• 联合体变量不能参加任何运算和初始化

Page 24: 第 8 章 结构、联合和枚举

8.9 枚举 8.9.1 枚举类型的定义例 : enum

weekday{sun=5,mon=1,tue,wen,thu,fri,sat};说明 : 可以直接改变成员的顺序。8.9.2 枚举类型变量的说明方法 1: 直接枚举类型说明weekday days;方法 2: 可以在定义枚举类型时说明

Page 25: 第 8 章 结构、联合和枚举

8.9.3 枚举变量的使用 只能做赋值和关系运算。 days=sun;说明 : 1. 在程序中起到一个限定作用。 2. 使用时 , 枚举变量的取值限定在定义时的给定范围 . 。 3. 枚举变量输出时 , 只能输出枚举定义时的序号 .例如 : days=sat; c<<days<<endl;