第7章 结构体、共用体和枚举类型_第1页
第7章 结构体、共用体和枚举类型_第2页
第7章 结构体、共用体和枚举类型_第3页
第7章 结构体、共用体和枚举类型_第4页
第7章 结构体、共用体和枚举类型_第5页
已阅读5页,还剩35页未读, 继续免费阅读

下载本文档

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

kok电子竞技:文档简介

1234结构体类型的定义结构体类型变量结构体类型数组共用体第7章结构体、共用体和枚举类型5枚举类型结构体类型7.17.1.1结构体类型定义用途:把不同类型的数据组合成一个整体——自定义数据类型。结构体是一种复合数据类型。结构体类型定义的一般形式struct

结构体类型名

{

数据类型1成员名1;数据类型2成员名2;……….数据类型n成员名n;};7.1.1结构体类型定义实例:定义结构体类型,描述下列数据

(1)学生情况:包含学生的学号、姓名、性别、年龄、成绩,住址:

structstudent{intnum;

charname[20];

charsex;

intage;

floatscore;

charaddr[60];};

注:‘;’不能省7.1.1结构体类型定义(2)个人数据:包含姓名、性别、年龄、身高、体重、住址:structperson{charname[20];//姓名charsex;//性别intage;//年龄floatheight;//身高floatweight;//体重charaddr[60];//住址};

7.1.1结构体类型定义(3)日期结构体类型包括年、月、日:structdate{intyear;intmonth;intday;};(4)如职工信息结构体类型:structperson{charname[20];//姓名charaddress[60];//地址floatsalary;//工资floatcost;//扣款structdatehiredate;//入职日期};结构体类型定义描述结构的组织形式,不分配内存7.1.2

结构体类型变量

structstudent{int

num;charname[20];charsex;

intage;floatscore;charaddr[40];};structstudentstu1,stu2;

1.结构体变量的定义(1)先定义结构体类型,再定义结构体变量7.1.2

结构体类型变量(2)定义结构体类型的同时定义结构体变量例:structstudent{int

num;charname[20];charsex;

intage;floatscore;charaddr[40];}stu1,stu2;struct结构体名{

成员说明列表;

}变量名列表;

1.结构体变量的定义7.1.2

结构体类型变量例

struct{int

num;charname[20];charsex;

intage;floatscore;charaddr[40];}stu1,stu2;struct{

成员说明表列;

}变量名表列;

1.结构体变量的定义(3)直接定义结构体变量注:这种方式后续无法再定义这个类型的其他变量7.1.2

结构体类型变量注

意结构体类型与结构体变量概念不同1.类型:不分配内存;变量:分配内存。2.类型:不能赋值、存取、运算;变量:可以。3.结构体可嵌套。4.结构体成员名与程序中变量名可相同,不会混淆。

structstudent{int

num;charname[20];charsex;

intage;floatscore;structdatabirthday;charaddr[40];}stu1,stu2;structdate{intyear;intmonth;intday;};7.1.2

结构体类型变量

2.结构体变量的初始化structstudent/*定义结构数据体类型*/{charnum[8];charname[20];charsex;charaddr[40];}stu1={"202203001","zhangsan",'M',"zhufengstreet"};//定义结构体变量stu1,并赋初值例:或者studentstu2={"202203002","lisi",'M',"zhufengstreet"};//定义结构体变量stu2,并赋初值

3.结构体变量的使用(1)结构体变量的引用一般形式为:

结构体变量名.成员名例如,stu1.num表示引用结构体类型structstudent变量stu1中的num成员,因该成员的类型为int型,所以可以对它施行任何int型变量可以施行的运算。例如:stu1.num=20312;7.1.2

结构体类型变量还有一种引用形式为:

指针变量名->成员名例如,如下变量定义:structnode{floatx;node*next;}p,u,*pt;7.1.2

结构体类型变量

3.结构体变量的使用(1)结构体变量的引用pt=&p;p.x=12.2;p.next=&u;p.next->x=-23.7;u.next=NULL;12.2&u-23.7NULLpu&ppt

3.结构体变量的使用7.1.2

结构体类型变量(2)结构体变量的输入与输出C语言不能把一个结构体变量作为一个整体进行输入或输出,应该按成员变量输入输出。例如,若有一个结构体变量:

struct

{charnum[8];charname[20];intage;

charaddr[40];

}stu1={″2022001″,″WangWei″,″18″,″ZhufengStreet288″};应该如何输出stu1变量?

输出stu1变量,应该使用如下方式:

printf(″%s,%s,%d,%s\n″,stu1.num,,stu1.age,stu1.addr);

输入stu1变量的各成员值,则用:

scanf(″%s%s%d%s″,stu1.num,,&stu1.age,stu1.addr);结构体类型数组7.2

与定义普通数组一样,在结构体数组名之后指定元素个数,就能定义结构体数组。例如:

structstudentstu[30];

structpersonemployee[100];

struct

{charname[20];

intnum;

floatprice;

floatquantity;

}part[100];访问结构体数组元素的成员的标记方法为:

结构体数组名[元素下标].结构体成员名7.2.1结构体类型数组的定义例如:part[10].price=8.99;printf(“%s”,part[3].name);例

structstudent{charnum[8];charname[20];charsex;intage;}stu[5]={{“2022101”,“张三”,‘M’,18},{“2022102”,“李四”,‘F’,18},{“2022103”,“王五”,‘M’,19},{“2022104”,“周六”,‘F’,19},{“2022105”,“张三”,‘M’,18}};全部初始化时数组维数可以省略。7.2.2

结构体类型数组的初始化例

structstudent{intnum;charname[20];charsex;intage;}stu[5]={{……},{……},{……}};部分初始化,如上所示,只对数组前三个元素赋初值。7.2.2

结构体类型数组的初始化(1)引用结构体数组元素的成员。例如:students[i].num这是序号为i的数组元素中的num成员。如果数组已如上初始化,且i=2,则相当于students[2].num,其值为”2022103”。(2)可以将一个结构体数组元素赋给同一结构体类型数组中的另一个元素,或赋给同一类型的变量。例如:structstudentstudent[3],stu1;现在定义了一个结构体数组student,它有3个元素,又定义了一个结构体变量stu1,则下面的赋值合法。stu1=student[0];student[2]=student[1];student[1]=stu1;7.2.3

结构体数组的使用(3)结构体数组元素的输入与输出不能把结构体数组元素作为一个整体直接进行输入或输出,只能以单个成员对象进行输入输出。例如:scanf(“%s”,student[0].name);printff(“%s”,&student[0].num);7.2.3

结构体数组的使用结构体类型指针7.37.3.1指向结构体变量的指针指向结构体变量的指针的定义形式:struct类型名*指针变量名;例如structdate*pd,date3;pd=&date3;使用结构体指针变量引用成员形式(*结构体指针名).成员名结构体指针名->成员名structdate{intyear;intmonth;intday;};(*pd).monthpd->monthdate3.month7.3.1指向结构体变量的指针总结:结构体成员变量引用方式①结构体变量.成员名②(*p).成员名③p->成员名其中,->称为指向运算符。7.3.2指向结构体数组元素的指针一个指针变量可以指向一个结构体数组元素,也就是将该结构体数组的数组元素地址赋给此指针变量。例如:struct{inta;floatb;}arr[3],*p;p=arr;此时使p指向arr数组的第一个元素,“p=arr;”等价于“p=&arr[0];”。若执行“p++;”则此时指针变量p此时指向arr[1],指针指向关系如图所示。pp++arr[0]arr[1]arr[2]共

型9.47.4.1共用体类型共用体也称为联合体数据类型,可把不同类型的数据项组成一个整体,这些不同类型的数据项可以共用一个共同体空间,且在内存中所占用的起始单元是相同的。

1.共用体类型定义

共用体类型的定义形式与结构体类型的定义形式相同,只是其类型关键字不同,共用体的关键字为union。一般形式为union共用体类型名{

成员说明列表};7.4.1共用体类型的定义例如:unionresult{chargrade;floatscore;};共用体是多种数据值覆盖存储,几种不同类型的数据值从同一地址开始存储,但任意时刻只存储其中一种数据,而不是同时存放多种数据。

注意:

2.共用体变量定义

(1)先定义共用体类型,再定义共用体类型变量。例如:unionresult{chargrade;floatscore;};unionresultstu1,stu2;7.4.1共用体类型的定义

(2)在定义共用体类型的同时定义共用体类型变量。例如:

unionresult{chargrade;floatscore;}stu1,stu2;(3)定义共用体类型时,省略共用体类型名,同时定义共用体类型变量。例如:union{

chargrade;floatscore;}stu1,stu2;7.4.1共用体类型的定义

可以引用该共用体变量的某个成员,引用方式与引用结构体变量中的成员相似。例如,

stu1.grade,

stu1.score,一个共用体变量不能同时存放多个成员的值,而只能存放其中的一个值,这就是最后赋给它的值。例如:

stu1.grade=′D′;

stu1.score=61.00;共用体变量中最后的值是61.00。

注意:7.4.2共用体类型变量的使用

(1)共用体变量stu1所占的内存单元的字节数不是2个成员的字节数之和,而是等于2个成员中最长字节的成员所占内存空间的字节数,也就是说,stu1的2个成员共享4个字节的内存空间。7.4.2共用体类型变量的使用gradescore共用体成员所占空间示意图

(2)变量stu1中不能同时存在2个成员,只是可以根据需要用stu1存放一个字符数据,或存放一个浮点数。例如:stu1.grade=’A’;

stu1.score=100.00;7.4.2共用体类型变量的使用字符’A’占用了stu1的1个字节。2条赋值语句,如果按顺序执行,只有最后一个语句“stu1.score=100.00;“的结果保留下来,前面的字符’A’被100.00覆盖了。

(3)共用体一般不单独使用,通常作为结构体的成员,这样结构体可根据不同情况放不同类型的数据。7.4.2共用体类型变量的使用例如,需要把学生和教师的数据放在一起处理。学生和教师的数据相同的分量有:姓名、编号和身份。但也有不同的部分:学生需要保存10门课程的分数,分数用浮点数表示,教师则保存工作情况简介,用字符串表示。教师和学生的不同部分可以用共用体描述。例如:程序示例:unioncondition{floatscore[10];

charsituation[80];};structperson{charname[20];

charnum[10];

charkind;

unionconditionstate;}personnel[30];7.4.2共用体类型变量的使用例:利用共用体变量表示学生的期末成绩。#include<stdio.h>unionresult{ chargrade; floatscore;};structstudent{ char*num; char*name; unionresultr;}stu1,stu2;voidmain(){ stu1.num="202203001"; ="zhangjun"; stu1.r.score=86; stu1.r.grade='B';//覆盖了前面的分数赋值,stu1输出等级 stu2.num="202203002"; ="liming"; stu2.r.grade='C'; stu2.r.score=78;//覆盖了前面的等级赋值,stu2输出分数 printf("%s%s%c\n",stu1.num,,stu1.r.grade); printf("%s%s%.2f\n",stu2.num,,stu2.r.score);}枚

型7.57.5

枚举类型用枚举方法列举一组标识符作为枚举类型的值的集合。当一个变量具有这种枚举类型时,它就能取枚举类型的标识符值。枚举类型定义的一般形式为:

enum

枚举类型名{标识符1,标识符2,…,标识符n};定义一个枚举类型和枚举变量如下:enumcolorname{red,yellow,blue,white,black};enumcolornamecolor;变量color是枚举类型enumcolorname,它的值只能是red、yellow、blue、white、black。7.5

枚举类型同结构体和共用体类似,枚举类型变量的定义也有3种。(1)先定义枚举类型,再定义变量(2)定义枚举类型的同时定义变量(3)直接定义枚举类型变量7.5

枚举类型注

意枚举元素不是变量,不能改变其值。枚举元素作为常量,它们的值就是从0的序号。但不能将一个整数赋给枚举变量。枚举常量可以进行比较运算。枚举常量不是字符串。本章小结构造数据类型将多种不同数据类型、且相互关联的一组数据,组合成一个有机的整体来使用,构造数据类型的内存空间分配遵循前面所讲数据存储类型的规则,是C语言进行复杂数据处理的基础。本章是C语言程序设计的提高部分,要求重点掌握结构体类型、共用体类型和枚举数据类型的概念,掌握各自的定义、初始化及其引用方式,它们在程序设计中的应用。感谢观看

温馨提示

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

评论

0/150

提交评论