结构体(VC++第7章wu).ppt_第1页
结构体(VC++第7章wu).ppt_第2页
结构体(VC++第7章wu).ppt_第3页
结构体(VC++第7章wu).ppt_第4页
结构体(VC++第7章wu).ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、Page 1,结构体、共用体和枚举类型,参考书VC+程序设计基础第七章,Page 2,结构体 概念,概念 结构体:一组由不同类型数据项组成的构造类型数据 如: num name sex age score,可由如下方法定义以上结构体类型: Struct student char num9; char name10; char sex3; int age; float score; ;,成员名,成员类型,;不能忘,Student,Page 3,初始化时,在花括号中列出的值的类型及顺序必须与该结构体类型定义中说明的结构体成员一一对应。,结构体 定义(一),1.先定义结构体类型,再定义变量 上述页中

2、已定义结构体类型 struct student 定义该类型的变量 student1,student2 student student1,student2;,对变量student1, student2 初始化如下: student student1=“98231009”,“li ming”,“男”,20,87.0; student student2=“98231010”,“wang ping”,“女”,19,92.0;,例: student student1=98231009, “li ming”,“男”,20,87.0; student student2=“982310107”, “wang

3、ping”,“女”,19,92.0;,Page 4,结构体 定义(二),定义结构体类型的同时定义变量 struct student char num8; char name10; char sex; int age; float score; student1,student2;,Page 5,结构体 定义(三),struct student char num8; char name10; char sex; struct date birthday ; float score; student1,student2;,结构体成员也可为结构体,如: struct date int year; i

4、nt month; ;,Page 6,结构体变量的引用和存放,结构体成员引用 结构体变量名.成员名 各成员与其同类型的普通变量用法相同 struct date char year5; char month3; ; struct student char num9; char name10; struct date birthday; char sex3; stu; 结构体的各成员在内存为依次连续存放,Page 7,结构体成员举例,#include struct date char year5; char month3; ; struct student char num9; char name

5、10; struct date birthday; char sex3; ; void main() student student1=20001021,huangjiao,1980,12,男; coutstudent1.birthday.yearn; coutstudent1.sexn; ,Page 8,结构体变量的初始化,结构体类型变量分外部存储类型和函数内部存储类型,初始化方法基本相同。 外部存储类型:结构体类型变量定义在函数外部, 其作用域为从定义到文件结束。 初始化应在变量定义时进行,如: struct date int year; int month; ; struct stude

6、nt char name10; struct date birthday; char sex; stu1=“Li Fa”,1980,12,M;,或: struct student stu1=“Li Fa”,1980,12,M;,Page 9,strcpy(,); stu2=stu1; stu2.birthday.year=stu1.birthday.year; stu2.birthday.month= stu1.birthday.month; stu2.sex=stu1.sex;,结构体变量的赋值,结构体变量的成员赋值 stu.sex=F; stu.birt

7、hday.year=1980; 结构体变量的赋值 struct student stu1=“Li Fa”,1980,12,M,stu2;,从键盘输入,则应对每个成员分别赋值,如: Cin.getline(); Cinstu2.birthday.year;,注意输入跳空问题,Page 10,结构体变量可以作为函数的参数,当形参与实参为结构体变量时,其结合方式为值调用方式,即单向传送。 函数返回值类型也可为结构体。 例:,Page 11,#include struct s int m; float x; ; void swap(s s1, s s2) s t; t=s1; s1=

8、s2; s2=t; s fun(s s1, s s2) s t; t.m=s1.m+ s2.m; t.x=s1.x+ s2.x; return t; ,void main() s r1=100,250.5, r2=200,350.5; swap(r1, r2); cout“r1.m=“r1.mt “r1.x=“r1.x n; cout“r2.m=“r2.mt “r2.x=“r2.x n; s sum; sum=fun(r1, r2); cout“sum.m=“sum.mt “sum.x=“sum.x n; ,r1.m=100 r1.x=250.5 r2.m=200 r2.x=350.5 sum

9、.m=300 sum.x=601,Page 12,结构体数组,定义 struct student char num10; float score; stu3; student stud3; 初始化 struct student stud3= “1001”,76,”1002”,83.5, ”1003”,64;,Page 13,#include struct s int id; int eng,math; ; void main() s r3=15,60,70,10,100,100; s rr2=1,60,30,4,80,90; for(int i=0;i3;i+) coutri.idtri.en

10、gtri.mathn; for(i=0;i2;i+) coutrri.idtrri.engtrri.mathn; ,60 70 10 100 100 0 0 0 1 60 30 4 80 90,Page 14,结构体类型的静态成员,在定义结构体的成员时,不能指定成员的存储类型为auto、register、extern,但可指定成员的存储类型为static. 若结构体类型中某个成员定义为static存储类型,表示对于这种结构体类型的所有变量,系统为该成员只分配一个存储空间。 例:,Page 15,#include struct s static int id; int eng; ; int s:

11、id=50; s s1; void main() s s2,s3; cout“s1.id=“s1.idn; s2.id=200; cout“s2.id=“s2.idn; cout“s1.id=“s1.idn; s3.id=400; cout“s3.id=“s3.idn; cout“s2.id=“s2.idn; cout“s1.id=“s1.idn; ,S1.id = 50 S2.id = 200 S1.id = 200 S3.id = 400 S2.id = 400 S1.id = 400,/对静态成员进行定义性说明,并初始化。,必须在文件作用域的某个地方,对静态 成员进行定义性说明,且仅能说

12、明一次。,Page 16,共用体(联合体),定义形式: union 共用体名 数据类型 成员名 1; 数据类型 成员名 2; : 数据类型 成员名 n; ; 引用形式: 共用体名成员名,共用体变量各成员合用同一起始地址开始的内存 共用体变量所占内存为占内存最多的成员所占用内存 共用体变量不可初始化 在任一时刻,在一个共用体变量内,只有一个成员起作用,Page 17,例: union uarea char c_data; short int s_data; long l_data; ,Page 18,枚举类型,问题的提出: 当处理一些非数值数据时,用自然语言中有相应含义的单词代表某一种状态。 枚

13、举类型及枚举类型变量的定义 enum weekdays sun,mon,tue,wed,thu,fri,sat; weekdays day1,day2;,枚举常量/枚举元素,枚举类型变量,Page 19,枚举元素,enum weekdays sun,mon,tue,wed,thu,fri,sat; 枚举元素不可以被赋值 枚举元素作为常量,有默认值。 可以改变枚举元素的值。(在定义枚举类型时另外指定) 例: enum booleantrue=1,false=0; enum colors red=5,blue=1,green,black,white,yellow;,Page 20,枚举类型变量的使

14、用,enum weekdays sun,mon,tue,wed,thu,fri,satday1,day2;,赋值运算: day1= tue; day1=( enum weekdays) 2 day2= day1;,比较运算: (比较枚举元素的序号) if( day1 fri ) 。 if( day1= =tue ) 。,枚举类型变量不能直接从键盘输入: cinday1; 错 枚举类型变量可以直接输出: day1=wed; coutday1;,Page 21,举例,#include enum week monthday,tuesday,wedensday,thirsday,friday,satu

15、rday,sunday ; void main() week weekday; weekday=saturday; coutweekdayn; int i=weekday; switch(i) case(0): coutmonthday; case(1): couttuesday; case(2): coutwedensday; case(3): coutthirsday; case(4): coutfriday; case(5): coutsaturday; case(6): coutmonthday; ,Page 22,指向结构体的指针,定义 struct student char num

16、10; int score; stu,*p; p= 用指针p表示各成员如下: (*p).num (*p).score 或:p-num p-score 两种表示方法等价,分析下面运算: p-score+ +p-score,Page 23,指向结构体数组的指针,定义 struct student char num10; int score; stud3 =“1001”,76, ”1002”,83.5, ”1003”,64; struct student *p; p=stud;,Page 24,#include struct w int a; int *b; *p; void main() int

17、x0=12,11,x1=32,31; w x2=100,x0,300,x1; p=x; coutba+aaaan; ,Page 25,指向结构体的指针作函数的参数 p227例10.5 函数返回指向结构体的指针 例C10_4.c,Page 26,链表(概念一),要存储一组任意的数据元素可用多种方式,如: 数组 :内存分配空间连续,长度事先固定。 链表 :内存分配空间可以不连续,在程序运行中可根据需要动态分配或释放内存。,头指针,头指针定义: struct node *head;,结点的定义: struct node int data; struct node *next;,链表(概念二),结点

18、包括:自身信息(数据域),后继元素的位置(指针域)。 结点数据的访问形式 设指针 p 为某结点的起始地址数据域:p-data 指针域:p-next 特点: 插入、删除元素时不必大量移动数据 不能随机存取其中记录,要从头指针开始。,动态分配内存的函数,malloc(size) 分配内存长度为size的连续空间,成功则返回该空间的起始地址,不成功,返回0(NULL)。 如: struct node *p; p=(stuct node)malloc(sizeof(struct node); calloc(n,size) 分配n个内存长度为size的连续空间,成功则返回该空间的起始地址,不成功,返回0(NULL)。 Free(ptr) 释放指针ptr所指的内存空间。,建立链表(一),Typedef struct node *linklist 1. 建空表 linklist head,last,p; head=NULL; 2. 加n个结点(逐个加在链表尾) head=(LinkLis

温馨提示

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

最新文档

评论

0/150

提交评论