版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东深圳南山二外(集团)学府二小招聘小学体育教师1人笔试模拟试题及答案解析
- 制造企业新人入职培训教材汇编
- 2025-2030中国智能工地管理系统研究AI视频监控与施工流程数字化管理效果的评估报告
- 2026西藏拉萨墨竹工卡县机关事业单位编外聘用人员招聘5人备考题库附答案详解(完整版)
- 2026广东省清远市连南瑶族自治县带编赴高校及三甲医院专项招聘医疗卫生人才22人备考题库带答案详解(新)
- 2026新疆兵团第一师八团医院招聘3人备考题库含答案详解【预热题】
- 2026山东德州市宁津县招聘教师23人备考题库附答案详解【突破训练】
- 2026广西百色市右江区百城社区卫生服务中心招聘公益性岗位2人备考题库【基础题】附答案详解
- 2026广西钦州市城市管理局招聘公益性岗位人员2人备考题库附完整答案详解【全优】
- 2026上海交通大学公共卫生学院栾洋课题组博士后招聘备考题库重点附答案详解
- 冀教版五年级下册小学英语全册单元测试卷(含听力音频文件)
- 琉璃瓦施工合同协议书
- 《动物营养学》全套教学课件
- 车间物料流转管理制度
- 《人工智能安全导论》 课件 第五章 人工智能技术在网络入侵检测领域
- 《康复评定技术》课件-第二章 人体形态与反射评定技术
- 开展课外读物负面清单管理的具体实施举措方案
- 北师大版二年级数学下册全册10套试卷(附答案)
- 西方哲学史复习笔记
- 集团公司战略协议管理办法
- 非煤地下矿山风险辨识与评估
评论
0/150
提交评论