




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
10.1结构体10.2共用体10.3枚举类型10.4用typedef定义类型问题:学籍管理需要每个学生的下列数据:学号、姓名、性别、年龄、分数,请用C语言程序存储并处理一组学生的学籍。
单个学生学籍的数据结构学号(num):int型姓名(name):char[]型性别(sex):char型年龄(age):int型分数(score):float型
这些信息数据之间相互关联,适合看作一个整体。但数据类型不一致,仅用已学数据类型无法解决。需要构造一种新的数据类型————结构体。10.1结构体10.1.1定义(声明)结构体类型
struct[结构体名]{
数据类型1成员名1;
数据类型2成员名2;……
数据类型n成员名n;};{}中是组成该结构体的成员。成员类型可以是基本型或构造型struct是关键字,不能省略用户定义的合法标识符。可省:无名结构体末尾分号不能省我们来看一个结体构学生(student)的类型定义的语句:structstudent{ int
sno; /*学号*/ char
sname[20]; /*姓名*/ char
gender; /*性别*/ int
age; /*年龄*/ float
score; /*成绩*/};注意:结构体类型声明只是定义了一种新的类型,类似int等类型。它是对结构的组织形式的描述,系统还没分配实际内存空间。10.1.2定义结构体变量有了类型后,就可以定义变量。三种形式:一般形式:struct结构体名{
类型标识符成员名;类型标识符成员名;
…………….};struct结构体名变量名表列;(1)先定义(声明)结构体类型再定义变量名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};//结构体类型的声明
structstudentstudent1,student2;//结构体变量的定义(2)定义结构体类型的同时定义结构体变量一般形式:struct结构体名{
类型标识符成员名;类型标识符成员名;
…………….}变量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;(3)直接定义结构体变量(即不出现结构体名)一般形式:struct{
类型标识符成员名;类型标识符成员名;
…………….}变量名表列;例struct
{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;namenumsexagescoreaddr2字节2字节20字节1字节4字节30字节……..10.1.3访问结构体成员结构体成员与结构体变量之间的链接可以使用成员运算符“.”来建立,该运算符又称为点运算符。引用方式:结构体变量名.成员名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;10.1.4结构体变量的初始化与其他类型变量一样,对结构体变量也可以在定义时进行初始化赋值,但附在变量后面的一组数据须用花括号括起来,其顺序应与结构体中的成员顺序保持一致。例如:structbookbook2={"Pascal","Thomas",300,22.5};structstudent{charnum[15];charname[20];intscore[4];ints;}student1={"2007101010","wang",{89,90,87,80},0};main(){structstudentstudent2;
student2=student1;…….}10.1.5结构体嵌套例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];structdatebirthday;}student1;numnamebirthdaymonthdayyear结构体成员本身又是一个结构体类型。例:声明structstudent类型时,将成员birthday指定为structdate类型结构体嵌套时逐级引用student1.birthday.month=3(√)student1.birthday=3(
)10.1.6结构体数组1、定义结构体数组:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu[3];10.1.6结构体数组2、结构体数组的初始化:结构数组[n]={{初值表1},{初值表2},...,{初值表n}};structstudent{intnum;charname[20];charsex;intage;floatscore;};structstudentstu[3]={{10101,"李宁",'M',18,87.5},{10102,"张凡",'M',19,99},{10103,"王敏",'F',20,78.5}};10.1.6结构体数组结构体数组元素类似于一个结构体变量只能对结构体数组元素的成员进行输入、输出或其它基本操作main(){inti;for(i=0;i<3;i++)for(j=0;j<4;j++)
stu[i].s+=stu[i].score[j];
….}3、结构体数组元素的使用10.1.7结构体指针变量1.指向结体变量的指针变量structsample{ intx; inty; floatt; charu;};structsamplesam1;structsample*ptr;ptr=&sam1;结构体变量成员的访问常见的有三种方式,以sam1的成员x为例:(1)sam1.x(2)(*ptr).x(3)ptr->x关于结构体指针变量的使用,我们总结如下:(1)定义结构体指针变量的一般形式如下:结构体类型名*结构体指针变量名;(2)使结构体指针变量指向结构体类型变量:结构体指针变量名=&结构体变量名(3)通过指针去访问所指结构体变量的某个成员时,有如下两种方法:(*指针变量名).成员名或者指针变量名->成员名2.指向结构体数组元素的指针变量structsample{ intx; inty; floatt; charu;};structsamplesam[5];structsample*p;p=sam;或p=&sam[0];用指针p去访问结构体数组的某个成员,如sam[1].y应该是:(*(p+1)).y或(p+1)->y10.1.8结构体与函数将一个结构体变量的值传递给另一个函数,有3个方法:1.用结构体变量的成员作实参。2.用结构体变量作实参。3.用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参。值传递值传递引用传递认真读【例10.10】-【例10.12】中的程序10.2共用体union联合名{
类型标识符成员名;类型标识符成员名;
…………….};例uniondata{inti;charch;floatf;};类型定义不分配内存10.2.1定义共用体类型10.2.2定义共用体变量形式一:uniondata{inti;charch;floatf;}a,b;形式二:uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:union{inti;charch;floatf;}a,b,c;unionsample{ shortinta; floatb; charc;}sam1;三、共用体变量特点:几个成员共用一段内存。1:共用体变量的内存长度是多少?
最长成员所占字节数。2:共用体变量几个成员能同时存在吗?
不能。一个时刻只有一个成员存在。否则会被覆盖。3:共用体变量成员不能同时存在,那当前起作用的是谁?
起作用的成员是最后一次存放的成员共用体和结构体的比较:
例如:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。structdata{inti;charch;floatf;}a;uniondata{inti;charch;floatf;}a;“结构体”变量a:各成员同时存在占2+1+4=7个字节。“共用体”变量a任一时刻只有一个成员存在占4个字节(一个float占4个字节)achfiachfi10.2.3访问共用体变量例a.i=1;a.ch=‘a’;a.f=1.5;printf(“%d”,a.i);(
编译通过,运行结果不对)
引用规则不能引用共用体变量,只能引用其成员共用体指针名->成员名共用体变量名.成员名(*共用体指针名).成员名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f共用体变量中起作用的成员是最后一次存放的成员例union{inti;charch;floatf;}a;a=1;(
)
不能在定义共用体变量时初始化例union{inti;charch;floatf;}a={1,’a’,1.5};(
)
可以用一个共用体变量为另一个变量赋值例floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a’;a.f=1.5;b=a;(
)x=a.f;(
)10.3枚举类型10.3.1定义枚举类型用关键字enum说明枚举类型,其一般形式为:enum枚举类型名{枚举常量1,枚举常量2,…,枚举常量n};例如:enumcolor_name{red,yellow,blue,white,black};10.3.2定义枚举变量说明了枚举类型,就可以用于定义枚举类型变量,其一般形式为:enum枚举类型名枚举类型变量名列表;enumcolor_namecolor;定义了枚举变量color,它们只能取red,yellow,blue,white,black这五个值之一,如:color=yellowcolor=blue;枚举元素是常量,在c编译器中,按定义时的排列顺序取值0、1、2、...。如:color=blue;printf("%d",color);输出整数2。在定义枚举类型时,可以指定枚举常量的值,如:enumcolor{red,yellow,blue,white=6,black};此时,red的值为0,yellow的值为1,blue的值为2,white的值为6,black的值为7。【例10.14】枚举类型的应用。#include<stdio.h>intmain(){ enumcolor_name{red,yellow,blue,white,black}; enumcolor_namecolor; for(color=red;color<=black;color++) switch(color) { casered:printf("red:\t%d\n",red);break; caseyello
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年会计职业任职资格考试指导试题及答案
- 2025年胺基化工艺证模拟考试题及答案
- 农业产品抽检方案范本
- 2024年行政管理师重大考点试题及答案
- 布艺产品在办公室环境的舒适度与工作效率提升考核试卷
- 建设项目监理中的安全生产管理措施考核试卷
- 2023年中国纺织建设规划院公开招聘2人笔试参考题库附带答案详解
- 2024年项目管理专业人士资格认定考试试题及答案
- 2023年中国机械总院物业中心怀柔分中心招聘笔试参考题库附带答案详解
- 微生物检验各类样本处理试题及答案
- 病例分型标准
- LongleyRice无线电波传输模型
- 液压支架外文翻译
- 我的家乡烟台课件
- 国外几家气压盘式制动器的比较
- 社区卫生服务中心医院感染监测统计表
- 信息安全评估表
- 硒知识科普手册
- 《洁净工程项目定额》(征求意见稿)
- 政府采购业务知识培训课件(PPT33张)
- 大体积混凝土施工质量控制论文
评论
0/150
提交评论