第7章自定义数据类型.ppt
《第7章自定义数据类型.ppt》由会员分享,可在线阅读,更多相关《第7章自定义数据类型.ppt(52页珍藏版)》请在三一文库上搜索。
1、第7章 自定义数据类型,7.1 结构体类型 7.2 共用体 7.3 枚举类型 7.4 用typedef声明类型,7.1 结构体 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体自定义数据类型 结构体类型定义,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本型或构造型,struct是关键字, 不能省略,合法标识符 可省:无名结构体,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,结构体类型定义描述结构 的组织形式
2、,不分配内存,结构体类型定义的作用域,结构体变量的定义 先定义结构体类型,再定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT stu1,stu2;,例 struct student int num; char name20; char sex; int age; floa
3、t score; char addr30; ; struct student stu1,stu2;,定义结构体类型的同时定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,直接定义结构体变量 一般形式:,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct int num; char name20; cha
4、r sex; int age; float score; char addr30; stu1,stu2;,用无名结构体直接定义 变量只能一次,说明 结构体类型与结构体变量概念不同 类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 结构体类型及变量的作用域与生存期,结构体变量的引用 引用规则 结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量 结构体嵌套时逐级引用,成员(分量)运算符 优先级: 1 结合性:从左向右,引用方式: 结构体变量名.成员名,结构体变量的初始化 形式一:
5、,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”;,形式二:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct student int num; char name20; char sex; i
6、nt age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,形式三:,struct 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,结构体数组 结构体数组的定义 三种形式:,形式一: struct student int num; char name20; char sex; int
7、 age; ; struct student stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,结构体数组初始化,例 struct int num; char name20; char sex; int age; stu =,;,顺序初始化: struct student int num; char name20; char sex; int age; ; struct studen
8、t 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; stu =,;,结构体数组引用,引用方式: 结构体数组名下标.成员名,例 统计后选人选票,#include struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; void main() int i,j; char leader_name20; for(i=
9、1;ileader_name; for(j=0;j3;j+) if(strcmp(leader_name,leaderj.name)=0) leaderj.count+; for(i=0;i3;i+) coutleaderi.nameleaderi.countendl; ,#include #include struct person string name; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; void main() int i,j; string leader_name; for(i=1;ileader_name; for(j=0;j
10、3;j+) if(leader_name=leaderj.name) leaderj.count+; for(i=0;i3;i+) coutleaderi.nameleaderi.countendl; ,例 统计后选人选票(使用string代替数组),结构体和指针 指向结构体变量的指针 定义形式:struct 结构体名 *结构体指针名; 例 struct student *p;,使用结构体指针变量引用成员形式,存放结构体变量在内存的起始地址,指向运算符 优先级: 1 结合方向:从左向右,例 指向结构体的指针变量,main() struct student long int num; char
11、name20; char sex; float score; stu_1,*p; p= ,例 int n; int *p= n=10,struct student stu1; struct student *p= (*p).num=101,指向结构体数组的指针,例 指向结构体数组的指针,#include 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; void main() struct
12、 student *p; for(p=stu;pnumnamesexageendl; ,用指向结构体的指针作函数参数 用结构体变量的成员作参数-值传递 用指向结构体变量或数组的指针作参数-地址传递 用结构体变量作参数-多值传递,效率低,struct data int a, b, c; ; void main() void func(struct data); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; cout“arg.a=“%darg.a “arg.b=“arg.b“arg.c=“arg.c; cout“Call Func()
13、n“; func(arg); cout“arg.a=“%darg.a “arg.b=“arg.b“arg.c=“arg.c; void func(struct data parm) cout“parm.a=“parm.a “parm.b=“parm.b“parm.c=“parm.c; cout“Process.n“; parm.a=18; parm.b=5; parm.c=parm.a*parm.b; cout“parm.a=“parm.a “parm.b=“parm.b“parm.c=“parm.c; cout“Return.n“; ,copy,例 用结构体变量作函数参数,运行结果: rag
14、.a=27 arg.b=3 arg.c=30 Call Func() parm.a=27 parm.b=3 parm.c=30 Process. parm.a=18 parm.b=5 parm.c=90 Return. arg.a=27 arg.b=3 arg.c=30,struct data int a, b, c; ; main() void func(struct data *parm); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; couta=“a b=“bc=“c; couta=18; parm-b=5; parm-c
15、=parm-a*parm-b; couta=“a b=“bc=“c; cout“Return.n“; ,例 用结构体指针变量作函数参数,运行结果: arg.a=27 arg.b=3 arg.c=30 Call Func() Parm-a=27 parm-b=3 parm-c=30 Process. Parm-a=18 parm-b=5 parm-c=90 Return. arg.a=18 arg.b=5 arg.c=90,用结构体变量和指向结构体变量的指针构成链表 链表中的每一个元素称为“结点” 头指针head,它存放一个地址。该地址指向一个元素。 每个结点包括两个部分 用户需要用的实际数据
16、下一个结点的地址 链表中各元素在内存中的存储单元可以是不连续的,用这种方法就可以建立以下链表。,例如:链表结构体类型: struct Student int num; float score; Student *next; /next指向Student结构体变量 ;,例7.4 建立一个简单链表,输出各结点中的数据。 #define NULL 0 #include struct Student long num; float score; struct Student *next; ; int main( ) Student a,b,c,*head,*p; a. num=31001; a.sco
17、re=89.5; b. num=31003; b.score=90; c. num=31007; c.score=85; head=,a.next= ,动态分配和撤销内存空间 在C语言中是利用库函数malloc和free来分配和撤销内存空间的。 C+提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。 注意: new和delete是运算符,不是函数。,7.1.7 动态分配和撤销内存的运算符new和delete,例如: new int; /开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针),new运算符使用的一般格式为: new 类型 初值 用ne
18、w分配数组空间时不能指定初值。 如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。 delete运算符使用的一般格式为: delete 指针变量,例如: new int(100); /开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 new char10; /开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址 new int54; /开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址 float *p=new float(3.14159); /开辟一个存放单精度数的空
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自定义 数据类型
链接地址:https://www.31doc.com/p-2552305.html