[经济学]第6章结构体、联合体、枚举类型_第1页
[经济学]第6章结构体、联合体、枚举类型_第2页
[经济学]第6章结构体、联合体、枚举类型_第3页
[经济学]第6章结构体、联合体、枚举类型_第4页
[经济学]第6章结构体、联合体、枚举类型_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1,第6章 结构体、联合体、枚举类型,C语言提供了一种聚合数据类型结构(或结构体,structure),它是若干相关数据项的集合,其类型可以不同。 结构体中所含成员的数量和大小必须是确定的,即结构体不能随机改变大小。组成一个结构体的诸成员的类型可以不同,即结构体是异质的。 联合(或共用体,union)类型是一种“可变身份”的数据类型,可在不同的时候在同一存储单元里存放不同类型的数据。,2,6.1 结构体与结构变量,6.1.1 结构体类型的定义 一般形式: struct 结构类型名 成员表; ;,struct student char name 20;int order,id; int age; char address100; int score10; ;,3,定义结构体类型时应注意以下几点: 结构体成员可以是任何基本数据类型的变量,如int、char、float和double型等,这些成员的类型可以相同,但往往是不同的。 结构体成员也可以是数组、指针类型的变量。例如: struct clist int count; char *first; char *last; ;,4, 结构体类型可以嵌套定义,即允许一个结构体中的一个或多个成员是其他结构体类型的变量。 struct id_card char name30; char sex; char nationality20; struct date int year,month,day; birthday; char *p_addr; struct date signed_date; long int number; char *office; ;,5,struct date int year,month,day; ; struct id_card char name30; char sex; char nationality20; struct date birthday; char *p_addr; struct date signed_date; long int number; char *office; ;,也可以采用另一种形式把各个结构体类型单独定义。,6, 结构体类型定义不允许递归,即:一个结构体类型的成员中不能含有类型为本结构体的变量。例如下面的说明是非法的: struct wrong char name5; int count; struct wrong a; struct wrong b; ; 在同一结构体内各成员的名称不能相同。 后的分号不能省略。,7,6.1.2 结构体变量的定义为了使用结构体变量,必须先定义结构体变量。定义结构体变量常用的方法有以下三种: 先定义结构体类型,再定义结构体变量。 struct coord float x; float y; ; struct coord first,second;注意,利用此种方法定义结构变量时,关键字struct和结构名必须同时出现,缺一不可。,8, 在定义结构体类型的同时定义结构体变量。例如: struct coord float x,y; first,second; 利用无名结构体类型定义变量。其一般形式是: struct 成员表; 变量名表;例如: struct float x,y; first,second;,9,结构体变量的内部表示定义结构类型只是声明一种数据类型的“样板”。这种样板是抽象的,还没有实体,不占用内存空间,不能在程序中对结构类型直接进行赋值、存取等操作。结构变量是实体,占用内存空间,可进行赋值、存取等操作。结构变量存储单元的分配是按照其类型的样板配置的,通常是依据各个成员在结构中出现的先后次序来分配空间。,10,11,结构变量可以嵌套: struct rectangle struct coord topleft;struct coord bottomrt; mybox;,12,13,6.2 结构成员的引用,6.2.1 引用结构成员的一般方式 引用结构成员的一般方式是: 结构变量名.成员名 first.x 表示结构变量first的成员x; first.y 表示结构变量first的成员y。,14,引用结构成员的方式是“由整体到局部”,即首先指明是哪个结构变量,然后通过成员关系运算符“.”找到其中指定的成员。结构变量中成员可以像相同类型的简单变量那样进行相应的运算。struct coord float x,y;struct coord first;first.x1.5;first.y3.8;,15,6.2.2 嵌套结构中成员的引用如果要存取最内层结构变量的成员,就要连续的使用“”运算符,即从外层结构变量找到内层结构变量,逐层存取,直至最内层的成员。例如有如下定义:struct coord float x,y;struct rectangle struct coord topleft; struct coord bottomrt;mybox;,16,为了对表示矩形的mybox变量的两个坐标点赋值,就要采用如下所示的方式:mybox.topleft.x1.8;mybox.topleft.y8.3;mybox.bottomrt.x12.4;mybox.bottomrt.y1.29;,17,6.3 结构变量的初始化,6.3.1 结构变量的一般初始化方式 struct student who Zhanghua ,991105,92,91,89,87,94,0.0;对结构变量初始化的一般形式是: 结构类型 结构变量名 初值表 ;6.3.2 有聚合成员的结构变量的初始化为了使层次清晰、增加程序的可读性,往往用花括号将这些聚合类型变量对应的初值整体上括起来。例如,struct student who Zhanghua ,991105, 92,91,89,87,94 ,0.0;,18,注意: 允许初值赋的个数少于结构变量中成员的个数,但不允许初值符的个数多于结构变量中成员的个数。struct student who Zhanghua ,991105, 92,91,89,87,94 ;结构变量who中成员average就隐含地被初始化为0。 结构变量初始化时,不能在结构体内初始化。 初始化数据的顺序和类型应与定义结构时结构成员的顺序和类型一致。,19,6.4 结 构 数 组,6.4.1 结构数组的定义及其应用由同一结构类型的变量组成的数组就称为结构数组。 struct score int scores5; /成绩 float av; /平均分 ; struct student char name20; /姓名 long int ino; /学号 struct score st; /成绩单 int order; /名次 class40;,20,如果要访问某个同学的名次,可采用下述形式: classi.order如果要访问第i位同学的平均分,则相应表达式为: classi.st.av 如果要访问第i位同学的第j门功课的成绩,则相应表达式为: classi.st.scoresj,21,6.4.2 结构数组在内存中的表示结构数组被定义以后,在编译时就为它分配一片连续的内存空间。各数组元素是连续存放的。,22,6.4.3 对结构数组的操作 可以把一个数组元素赋予另一个数组元素,从而实现结构变量之间的整体赋值。 class5class1; 可以单独地把一个结构数组元素中的一个成员的值赋予另一数组元素中的一个同类型的成员。 class5.inoclass1.ino;, 结构数组可以初始化。常用的初始化格式有两种:,23,struct 结构名 成员表; 数组名大小初值表;,struct 结构名 成员表; ; struct 结构名 数组名大小初值表;,初值表的形式:,,24,6.5 结构和指针,6.5.1 指针变量作为结构成员 struct student1 char * name; long int ino; struct score st; int * order; classN1;作为结构成员的指针变量遵循一般指针变量的运算规则。,25,#include void main()static struct s char c4,*sp; saabc,def;,例:分析下面程序运行之后的输出结果。,static struct t char *cp; struct s ss1; sbghi,jkl,mno; coutsa.c0“ ”*sa.sp; coutsa.c“ ”sa.sp; coutsb.cp“ ”sb.ss1.sp; coutsb.cp“ ”来存取结构成员,其一般引用形式是: 指针变量名-结构成员名注意,运算符“-”是由连字符和大于号二者组成的字符序列,它们要连在一起使用。,30, 利用间接访问运算符“*”来存取所指向结构变量的成员,其一般引用形式是: (*指针变量名).成员名 例如, struct student1 x1,*p; p&x1;(*p).name Zhangsan”注意,在这种引用形式中,“(*指针变量名)”中的一对圆括号是必须有的。,31,综上所述,存取结构成员的方式有三种等价形式: 直接利用结构变量名,其一般形式是: 结构变量名.成员名 利用指向结构变量的指针变量和间接成员运算符,其一般形式是: 指针变量名-成员名 利用指向结构变量的指针变量和间接访问运算符,其一般形式是: (*指针变量名) .成员名,32,8.5.3 指向结构数组的指针struct person char name20; char sex; int age;struct person group20;struct person *p;p &group0;/ pgroup;coutp-namep-sexp-age;,33,例:试分析下面程序的运行结果。#include iostream.hstruct tempchar *s;int i;struct temp *tp;,void main() static

温馨提示

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

评论

0/150

提交评论