第九章 结构体、联合体、枚举.ppt_第1页
第九章 结构体、联合体、枚举.ppt_第2页
第九章 结构体、联合体、枚举.ppt_第3页
第九章 结构体、联合体、枚举.ppt_第4页
第九章 结构体、联合体、枚举.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

结构体,数据类型,结构体类型的定义,结构体类型定义的一般形式为: struct 结构体名 类型名1 成员名1; 类型名n 成员名n; ;struct是结构体类型的标志。结构体名是由用户定义的标识符,它规定了所定义的结构体类型的名称。结构体类型的组成成分称为成员,成员名的命名规则与变量名相同。,结构体类型的定义,结构体类型定义形式例如: struct person char name20; char sex; int age; float height; ;表示定义了一个结构体类型struct person,它由name、sex、age和height四个成员组成。练习:定义一个结构体类型struct student,要求包含学生姓名、学号、数学成绩、英语成绩、计算机成绩、总分、邮政编码、通讯地址。,结构体类型的定义,在结构体类型定义中要注意以下几点:结构体类型定义中可以包含另外的结构体,即结构体是可以嵌套的。例如:struct date int year; int month; int day; ;struct person char name20; char sex; struct date birthday; float height; ;,结构体类型变量,一、结构体变量的定义定义结构体类型,只是说明了该类型的组成情况,编译系统并没有给它分配内存空间,就象系统不为int等类型本身分配空间一样。只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量。,结构体类型变量,一、结构体变量的定义1.先定义结构体类型,再定义变量。例如:struct person char name20; char sex; int age; float height; ; struct person per;表示先定义了结构体类型struct person,然后定义了一个struct person类型的结构体变量per。,结构体类型变量,一、结构体变量的定义结构体变量占用的内存空间是其成员所占内存之和,因此per 占用的内存空间为20+1+4+4=27个字节。结构体变量中的各成员在内存中按定义的顺序依次排列。注意:定义变量时,struct person必须在一起使用,它的用法与int、char等类型名的用法相同。,成员名,所占空间(字节数),name,height,age,sex,20,1,4,4,结构体类型变量,二、结构体变量的引用(1)对结构体变量中成员的引用引用的一般形式为:结构体变量名.成员名,结构体类型变量,(1)对结构体变量中成员的引用#include struct person char name20; char sex; struct data int year; int month; int day; ; float height; ;void main() person per; data birthday;,printf(Enter the name: );gets(); per.sex=M;per.birthday.year=1982;per.birthday.year+;per.birthday.month=12;per.birthday.day=15;per.height=(175+176)/2;printf(%s%3c%4d/%2d/%d%7.1fn,,per.sex, per.birthday.month, per.birthday.day, per.birthday.year, per.height);,结构体数组,一、结构体数组的定义定义结构体数组的方法和定义结构体变量的方法一样,只是必须说明其为数组。例如:struct person char name20; char sex; int age; float height; ; struct person per3;,结构体数组,一、结构体数组的定义定义结构体变量的三种方法都可以用来定义结构体数组。例如:struct person char name20; char sex; int age; float height; per3;,struct char name20; char sex; int age; float height; per3;,结构体数组,二、结构体数组的初始化和一般数组一样,结构体数组也可以进行初始化。struct person char name20; char sex; int age; float height; per3= LiPing,M,20,175,WangLing,W,19,162.5, Zhao Hui,M,20,178;数组每个元素的初值都放在一对大括号中,括号中依次排列元素各成员的初始值。与一般数组的初始化一样,如果给出了全部元素的初值,则数组的长度可以不指定,由系统根据初值的数目来确定数组长度。,结构体数组,三、结构体数组的引用对结构体数组的引用一般是对数组元素的成员进行引用。引用只要遵循对数组元素的引用规则和对结构体变量成员的引用规则即可。程序功能:输出结构体数组各元素的成员值void main()struct person char name20; char sex; int age; float height; per3= Li Ping,M,20,175, Wang Ling,F,19,162.5,Zhao Hui,M,20,178;,int i;for(i=0;i成员名 p-ID,结构体指针运算符“-” 结构体指针-结构体成员,struct person char name10; int age; ; struct person *p,s,boy3=”Zhang”, 18,”Wang”,20,”Li”,17;p=boy;,对于已定义的结构体数组,若用一个变量来存放该结构体数组在内存中的首地址,则该变量为指向结构体数组的指针变量。,例如,定义结构体类型person和结构体指针变量p。,定义了结构体数组boy和结构体指针变量p,且p指向数组boy的首地址。,结构体变量的首地址就是其指针,用取地址符得到指向结构体变量的指针变量称为结构变量的指针变量指向结构体变量的指针在使用时同样必须要先定义,再赋值,然后才可以使用如果有指针p 指向结构变量a,则 a.math 等价于 (*p).math 等价于 p-math使用指向结构数组的指针变量引用结构数组成员时,同指针指向数组时是类似的要明确指针当前指向的数组元素,同时要考虑结构体成员的引用方法,联合体,一、联合体类型及其变量的定义联合体类型定义的一般形式为: union 联合体名 类型名1 成员名1; 类型名n 成员名n; ;union是联合体类型的标志。联合体名是由用户定义的标识符,它规定了所定义的联合体类型的名称。联合体类型也由若干成员组成。,联合体,一、联合体类型及其变量的定义union score char grade; float point; ;表示定义了一个联合体类型union score,它由grade和point两个成员组成,联合体,一、联合体类型及其变量的定义1.先定义联合体类型,再定义变量。例如:union score char grade; float point; ;union score s;,2. 定义类型的同时定义变量。:union score char grade; float point; s;,3.直接定义联合体类型变量。union char grade; float point; s;,联合体,一、联合体类型及其变量的定义联合体类型及其变量的定义在形式上与结构体很类似。但它们的含义是不同的。结构体变量的每个成员分别占有独立的内存区域,因此结构体变量所占的内存字节数是其成员所占内存字节数之和。而联合体变量的所有成员共同占用一段内存区域,所以联合体变量所占字节数是其成员中占内存空间最大的成员的字节数。,联合体,二、联合体变量的引用联合体变量也必须先定义,后使用。不能直接引用联合体变量,只能引用联合体变量的成员。引用的一般形式为:联合体变量名.成员名联合体变量的每个成员也可以像普通变量一样进行其类型允许的各种操作。注意:由于联合体类型采用的是覆盖技术,因此联合体变量中起作用的总是最后一次存放的成员变量的值。,联合体,二、联合体变量的引用程序功能:引用联合体变量的成员#include void main() union temp char a; int b; t; t.a=66; t.b=266; /*266=256+10即266的二进制为1 00001010,所以高字节放1、低字节放10*/ printf(%x:%d , %x:%dn,变量t起始地址,联合体,成员变量a赋值前,成员变量a赋值后,变量t起始地址,成员变量b赋值前,变量t起始地址,成员变量b赋值后,变量t起始地址,联合体,联合体变量可以作为结构体变量的成员,结构体变量也可以作为联合体变量的成员,并且联合体类型也可以定义数组。程序功能:联合体变量作为结构体变量的成员注意:不能对联合体变量进行初始化。不能将联合体变量作为函数参数和返回值。,struct student char *name; int dept; union score char grade; float point; s; stu2;,枚举类型,一、枚举类型及其变量的定义枚举类型定义的一般形式为: enum 枚举名 枚举元素1,枚举元素2,;enum是枚举类型的标志。枚举名是由用户定义的标识符,它规定了所定义的枚举类型的名称,例如: enum season spring, summer, autumn, winter;表示定义了一个枚举类型enum season,它包含四个枚举元素。,枚举类型,一、枚举类型及其变量的定义定义了枚举类型后,就可以用它定义枚举类型变量。枚举类型变量的定义有两种方法。1.先定义枚举类型,再定义变量。例如: enum season spring, summer, autumn, winter ; enum season s;表示定义了一个enum season枚举类型和属于该类型的变量s。2.直接定义枚举变量。例如:enum spring, summer, autumn, winter s;,枚举类型,一、枚举类型及其变量的定义说明(1)枚举类型中的枚举元素是用户定义的标识符,对程序来说,这些标识符并不自动代表什么含义。例如,写成spring并不自动表示为“春季”,写成spr也可以。(2)在C 编译中,将枚举元素作为常量处理,称为枚举常量。因此不能对它们进行赋值。例如: spring=0; winter=1;是不合法的。,枚举类型,一、枚举类型及其变量的定义说明(3)枚举元素是被处理成一个整型常量的,它的值取决于定义时各枚举元素排列的先后顺序。第一个枚举元素的值为0,第二个为1,依次顺序加1。 例如,在以上的定义中,spring的值为0,summer的值为1,autumn的值为2,winter的值则为3。也可以在定义时改变枚举元素的值。例如: enum spring=1, summer, autumn, winter=0 s;没有指定值的枚举元素,其值为前一元素值加1。因此,spring的值为1,summer的值为2,autumn的值为3,而winter的值为0。,枚举类型,二、枚举类型变量的基本操作1.枚举变量的赋值只能给枚举变量赋枚举常量。不能直接给枚举变量赋整型值,但是可以通过将整型值强制类型转换成枚举类型赋值。程序功能:为枚举类型变量赋值void main() enum season spring, summer, autumn, winter s1,s2 ; s1=summer; s2=(enum season)2; printf(s1=%d,s2=%dn,s1,s2); ,枚举类型,二、枚举类型变量的基本操作2.枚举元素的判断比较void main() enum season spring=1, summer, autumn, winter s ; for (s=spring;s=winter;s+) printf(%d ,s); ,枚举类型,二、枚举类型变量的基本操作3.枚举变量只能通过赋值语句得到值,不能通过输入语句直接输入数据。也不能使用输出语句直接输出枚举元素,可以通过switch语句将枚举元素以字符串形式输出。 switch(s) case spring: printf(springn); break; case summer: printf(summern); break; case autumn: printf(autumnn); break; case winter: printf(wintern); break; ,类型定义typedef,定义新类型名的一般形式是: typedef 类型名 标识符使用typedef语句不是创造新类型,而是为已经存在的类型增加了一个名字。例如: struct person char name20; char sex; int age; ; typedef struct person PERSON; P

温馨提示

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

评论

0/150

提交评论