第7章 结构体与共用体课件

上传人:我*** 文档编号:141954284 上传时间:2020-08-14 格式:PPT 页数:53 大小:84.50KB
返回 下载 相关 举报
第7章 结构体与共用体课件_第1页
第1页 / 共53页
第7章 结构体与共用体课件_第2页
第2页 / 共53页
第7章 结构体与共用体课件_第3页
第3页 / 共53页
第7章 结构体与共用体课件_第4页
第4页 / 共53页
第7章 结构体与共用体课件_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《第7章 结构体与共用体课件》由会员分享,可在线阅读,更多相关《第7章 结构体与共用体课件(53页珍藏版)》请在金锄头文库上搜索。

1、第7章 结构体与共用体,7.1 结构体的概念 7.2 结构体类型变量 的定义方法 7.3 结构体变量的使 用形式和初始化,7.4 结构体数组 7.5 结构体与指针 7.6 结构体与函数 7.7 共用体,在实际的处理对象中,有许多信息是由多个不同类型的数据组合在一起进行描述,而且这些不同类型的数据是互相联系组成了一个有机的整体。此时,就要用到一种新的构造类型数据结构体(structure),简称结构。结构体的使用为处理复杂的数据结构(如动态数据结构等)提供了有效的手段,而且,它们为函数间传递不同类型的数据提供了方便。 同时也介绍在相同存储区域内存储不同数据类型的构造类型共用体(也称联合体)的相关

2、概念。,7.1 结构体的概念,结构体是用户自定义的新数据类型,在结构体中可以包含若干个不同数据类型和不同意义的数据项(当然也可以相同),从而使这些数据项组合起来反映某一个信息。结构体相当于COBOL 和PASCAL等高级语言中的“记录” 。 例如,可以定义一个职工worker结构体,在这个结构体中包括职工编号、姓名、性别、年龄、工资、家庭住址、联系电话。这样就可以用一个结构体数据类型的变量来存放某个职工的所有相关信息。并且,用户自定义的数据类型worker也可以与int、double等基本数据类型一样,用来作为定义其他变量的数据类型。,定义一个结构体类型的一般形式为: struct 结构体名

3、数据类型成员名1; 数据类型成员名2; : 数据类型成员名n; ; 在大括号中的内容也称为“成员表列”或“域表”。其中,每个成员名的命名规则与变量名相同;数据类型可以是基本变量类型和数组类型,也可以是指针变量类型,或者是一个结构体类型;用分号“;”作为结束符。整个结构的定义也用分号作为结束符,,例如:定义一个职工worker结构体如下: struct worker long number; char name20; char sex; /sex是成员名 int age; float salary; char address80; char phone20; ; /注意分号不要省略 int se

4、x=10; /sex是变量名,结构体类型中的成员名可以与程序中的变量名相同,二者并不代表同一对象,编译程序可以自动对它们进行区分。 最后,总结一下结构体类型的特点: (1)结构体类型是用户自行构造的。 (2)它由若干不同的基本数据类型的数据构成。 (3)它属于C+语言的一种数据类型,与整型、实型相当。因此,定义它时不分配空间,只有用它定义变量时才分配空间。,7.2 结构体类型变量的定义方法,结构体只是用户自定义的一种数据类型,因此要通过定义结构体类型的变量来使用这种类型。通常有三种形式来定义一个结构体类型变量,分别说明如下: 7.2.1 先定义结构体类型再定义变量名 这是C+语言中定义结构体类

5、型变量最常见的方式,一般语法格式如下: struct 结构体名 成员表列; ; struct 结构体名 变量名;,例如,定义几个职工变量: struct worker long number; char name20; char sex; int age; float salary; char address80; char phone20; ; struct worker worker1,worker2;,注意:“struct worker”代表类型名,不能分开写为: struct worker1,worker2; /错误,没有指明是哪种结构体类型 或 worker worker1,work

6、er2; /错误,没有struct关键字 /系统不认为worker是结构体类型 为了使用上的方便,程序员通常用一个符号常量代表一个结构体类型。即在程序开头加上下列语句: #define WORKER struct worker; 这样在程序中,WORKER与struct worker完全等效。,例如: WORKER long number; char name20; char sex; int age; float salary; char address80; char phone20; ; WORKER worker1,worker2; 此时,可以直接用WORKER定义worker1、wo

7、rker2两个变量,而不必再写关键字struct。,如果程序规模比较大,往往将对结构体类型的定义集中写入到一个头文件(以.h为后缀)中。哪个源文件需用到此结构体类型则可用#include命令将该文件包含到本文件中。这样做便于程序的修改和使用。 7.2.2 在定义类型的同时定义变量 这种形式的定义的一般形式为: struct 结构体名 成员表列; 变量名;,例如: struct worker long number; char name20; char sex; int age; float salary; char address80; char phone20; worker1,worker

8、2; 此例与前例作用相同,都定义了两个变量worker1、worker2,它们是结构体类型struct worker。,7.2.3 直接定义结构类型变量 其一般形式为: struct /没有结构体名 成员表列 变量名;,例如: struct long number; char name20; char sex; int age; float salary; char address80; char phone20; worker1,worker2;,一个结构体变量占用内存的实际大小,也可以利用sizeof运算求出。它的运算表达式为: sizeof(运算量) /求出给定的运算量占用内存空间的字节

9、数 其中运算量可以是变量、数组或结构体变量,也可以是数据类型的名称。 例如: sizeof(struct worker) sizeof(worker1),7.3 结构体变量的使用形式和初始化,7.3.1 结构体变量的使用形式 在定义了结构体变量以后,就可以使用这个变量。结构体变量是不同数据类型的若干数据的集合体。在程序中使用结构体变量时,一般情况下不能把它作为一个整体参加数据处理,而参加各种运算和操作的是结构体变量的各个成员项数据。 结构体变量的成员用以下一般形式表示: 结构体变量名.成员名 例如,上节给出的结构体变量worker1具有下列七个成员: worker1.number;worker

10、1.name;worker1.sex; worker1.age;worker1.salary;worker1.address; worker1.phone,在定义了结构体变量后,就可以用不同的赋值方法对结构体变量的每个成员赋值。例如: strcpy(worker1.name,”Zhang San”); worker1.age=26; strcpy(worker1.phone,”1234567”); worker1.sex=m; : : 除此之外,还可以引用结构体变量成员的地址以及成员中的元素。例如:引用结构体变量成员的首地址 但是可以如下引用: coutwan.name;,(2)如果成员本身又

11、属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级成员。只能对最低级的成员进行赋值或存取以及运算。例如,对上面定义的结构体类型变量worker1,可以这样访问各成员: worker1.age worker1.name worker1.birthday. year worker1.birthday. month worker1.birthday. day 注意:不能用worker1.birthday来访问worker1变量中的成员birthday,因为birthday本身是一个结构体变量。,(3)对成员变量可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例如: w

12、orker2.age=worker1.age; sum=worker1.age+worker2.age; worker1.age+; (4)在数组中,数组是不能彼此赋值的,而结构体类型变量可以相互赋值。 在C+程序中,同一结构体类型的结构体变量之间允许相互赋值,而不同结构体类型的结构体变量之间不允许相互赋值,即使两者包含有同样的成员。,7.3.2 结构体变量的初始化 与其他类型变量一样,也可以给结构体的每个成员赋初值,这称为结构体的初始化。有两种初始化形式,一种是在定义结构体变量时进行初始化,一般语法格式如下: struct 结构体名 变量名=初始数据表; 另一种是在定义结构体类型时进行结构体

13、变量的初始化。一般语法格式如下: struct 结构体名 成员表列; 变量名=初始数据表;,例如,前述student结构体类型的结构体变量wan在说明时可以初始化如下: struct student wan=”Wan Jun”,m,20,” SuZhou Road No.100”; 它所实现的功能,与下列分别对结构体变量的每个成员赋值所实现的功能相同: strcpy(wan.name,” Wan Jun”); wan.sex=m; wan.age=20; wan.addr=” SuZhou Road No.100”;,与数组的初始化特性相同,结构体的初始化仅限于外部的和static型结构体。也

14、就是说,在函数内部对结构体进行初始化时,必须指定该结构体为static型。对缺省存储类型的auto型结构体不能在函数内部对它们进行初始化。,7.4 结构体数组,具有相同结构体类型的结构体变量也可以组成数组,称它们为结构体数组。结构体数组的每一个数组元素都是结构体类型的数据,它们都分别包括各个成员(分量)项。 7.4.1 结构体数组的定义 定义结构体数组的方法和定义结构体变量的方法相仿,只需说明其为数组即可。可以采用三种方法:,1. 先定义结构体类型,再用它定义结构体数组。 结构体数组的定义形式如下: struct 结构体名 成员表列; ; struct 结构体名,例如: struct stud

15、ent char name20; char sex; int age; char addr20; ; struct student stu3;,2. 在定义结构体类型同时定义结构体数组。 结构体数组的定义形式如下: struct 结构体名 成员表列; 数组名元素个数;,例如: struct student char name20; char sex; int age; char addr20; stu3;,3. 直接定义结构体数组 结构体数组的定义形式如下: struct /没有结构体名 成员表列; 数组名元素个数;,例如: struct char name20; char sex; int

16、age; char addr20; stu3;,结构体数组名表示该结构体数组的存储首地址。 结构体数组适合于处理由若干具有相同关系的数据组成的数据集合体。用结构体数组处理数据时可以使用循环,从而使程序十分简炼。,7.4.2 结构体数组的初始化 结构体数组在定义的同时也可以进行初始化,并且与结构体变量的初始化规定相同,只能对全局的或静态存储类别的结构体数组初始化。 结构体数组初始化的一般形式是: struct 结构体名 成员表列; ; struct 结构体名 数组名元素个数=初始数据表;,或者: struct 结构体名 成员表列; 数组名元素个数=初始数据表; 在对结构体数组进行初始化时,方括号 中元素个数可以不指定。编译时,系统会根据给出初始的结构体常量的个数来确定数组元素的个数。 由于结构体变量是由若干不同类型的数据组成,而结构体数组又是由若干结构体变量组成。所以要特别注意包围在大括号中的初始数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号