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

下载本文档

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

文档简介

第九章结构体、共用体

与枚举类型张乐乐C语言程序设计19.1.1结构体类型的定义

struct

结构体名

{

数据类型1成员名1;

数据类型2成员名2;……

数据类型n成员名n;

};/*此行的分号不能少*/结构体类型定义的一般形式:

struct为关键字;结构体名是用户定义的类型标识。{}中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型。29.1.1结构体类型的定义

structstudent {

longnum; charname[20]; charsex; intage; floatscore; charaddr[30]; };[例9.1]:定义学生档案信息结构类型:成员表列

struct是类型关键字后分号不能少,表明语句结束。结构体名39.1.1结构体类型的定义

2.结构体类型特点:

(1)结构体类型由多个成员组成,成员的数据类型可以是整型、实型、字符型、数组

,也允许是另一个已经定义的结构体类型。

(2)结构体类型系统没有预先定义,凡需要使用结构体类型数据的,都必须在程序中自己定义。可根据设计者的需要来组合的。

(3)定义一个结构体类型,系统不会为其分配内存单元。定义一个类型只是表示这个类型的结构,即告诉系统它由哪些类型的成员构成,各占多少个字节,各按什么形式存储,并把它们当作一个整体来处理。49.1.2结构体变量

----(1)先定义结构体类型再定义变量名语法格式:struct结构体名

变量名表;例如:

structdatedate1;structstudents,t1,t2;按照结构体类型的组成,系统为定义的结构体变量分配内存单元。结构体变量的各个成员在内存中占用连续存储区域,结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和。structstudentnum4个字节name20个字节sex1个字节age2个字节addr30个字节score4个字节59.1.2结构体变量

----(2)

在定义类型的同时定义变量语法格式:例如:

structstudent

{charnum[8],name[20],sex;intage;floatscore;

}st1,st2;

struct结构体名

{

成员定义表;

}变量名表;69.1.2结构体变量

----(3)直接定义结构类型变量语法格式:

例如:

struct{charnum[8],name[20],sex;intage;floatscore;

}a,b,c;

struct{

成员定义表;

}变量名表;在struct后不出现结构体名,因此也不能再以此定义相同的结构体变量。79.1.3结构体变量的引用对于结构体变量,要通过成员运算符“.”,逐个访问其成员,访问的格式为:

结构变量名.成员

例如,structstudentst1,st2;st1.num,

引用结构变量st1中的num成员;引用结构变量st1中的name成员,引用结构变量st2中的name成员,也可以引用结构体变量以及变量成员的地址例如,&st1&其中的“.”是成员运算符89.1.3结构体变量的引用如果某成员本身又是一个结构类型,则只能通过多级的分量运算,对最低一级的成员进行引用。此时的引用格式扩展为:

结构变量名.成员.子成员.….最低一级子成员例如,引用结构变量st1中的birthday成员的格式分别为:st1.birthday.yearst1.birthday.monthst1.birthday.day99.1.4结构体变量的初始化【例】结构体变量的初始化

structdate{intyear,month,day;};

structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a={“0406011","Liming",'M',{1977,12,9},83},b={“0408025","Zhangliming",'F',{1978,5,10},87},c;

如果初值个数少于结构体成员个数,则将无初值对应的成员赋以0值。

如果初值个数多于结构体成员个数,则编译出错。109.5共用体结构体类型解决了如何描述一个逻辑上相关,但数据类型不同的一组分量的集合。在需要节省内存储空间时,c语言还提供了一种由若干个不同类型的数据项组成,但共享同一存储空间的构造类型。共用体——一种构造类型数据

共用体由若干不同类型的数据项(变量)占用同一段内存空间的结构,构成共用体的各个数据项称为共用体成员。由于共享的特性,只有最新存储的数据是有效的。119.5共用体

union共用体名

{数据类型1成员名1;

数据类型2成员名2;……

数据类型n成员名n;

};共用体类型定义的一般形式:

union为关键字;共用体名是用户定义的类型标识。{}中是组成该共用体的成员。成员的数据类型可以是C语言所允许的任何数据类型。129.5共用体

----①变量的定义u1变量chu1变量iu1变量f一.利用已定义的共用体类型名定义变量

union共用体名

变量名表;例如:

unionutype

u1,u2;

按照共用体类型的组成,系统为定义的共用体变量分配内存单元。共用体变量所占内存大小等于共用体中占用内存的长度最长的成员。u1变量cc[0]c[1]c[2]c[3]139.5共用体

----①变量的定义二.在定义共用体类型的同时定义变量例如:

unionutype{

inti;charch;floatf;charc[4];}a,b,c;

union共用体名

{

成员定义表;

}变量名表;149.5共用体

----①变量的定义三.直接定义共用体类型变量

例如:

union

{

inti;charch;floatf;charc[4];}a,b,c;

union{

成员定义表;

}变量名表;159.5共用体

----②变量的引用与结构变量一样只能逐个引用共用变量的成员

scanf(“%d”,&a);printf(“%d”,a);访问变量a各成员的格式为:a.i、a.ch、a.f等

scanf(“%d”,&a.i);printf(“%d\n”,a.i);错误错误16结构体与共用体的对比结构体与共用体的主要区别:

(1)结构体变量

占用空间是各成员所占空间之总和;

共用体变量

占存储空间是各成员中所占空间最大者。(2)结构体变量各成员占用内存中一片连续的存储区,各成员的地址互不相同;共用体变量各成员在内存中所占空间的起始地址相同。(3)结构体变量的各个分量在任何时刻都同时存在,且可同时引用。共用体变量的各个分量在同一时刻只存在其中一个,也只能引用其中的一个。

(4)结构体变量可以初始化,共用体变量不能初始化。179.7用户自定义类型为类型名定义别名的一般形式:

typedef类型名新类型名或

typedef

类型定义新类型名除可直接使用C提供的标准类型和构造类型(结构、共用、枚举)外,也可使用typedef定义已有类型的别名。该别名与标准类型名一样,可用来定义相应的变量。typedef是关键字;类型名可以是基本类型、构造类型、指针类型或自定义类型名;

新类型名是自定义的类型名。189.7用户自定义类型typedefintINTEGRER;/*定义INTEGRER为整型类型的别名*

温馨提示

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

评论

0/150

提交评论