08章 结构体类型和联合体类型——C语言程序设计技术_第1页
08章 结构体类型和联合体类型——C语言程序设计技术_第2页
08章 结构体类型和联合体类型——C语言程序设计技术_第3页
08章 结构体类型和联合体类型——C语言程序设计技术_第4页
08章 结构体类型和联合体类型——C语言程序设计技术_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计技术C语言数据描述和C程序设计初步 结构化程序设计根底和C语言的控制结构 数组及其应用 函数与C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型结构体类型和联合体类型 结构体数据类型的根本概念 结构体数组 结构体数据类型与指针的关系联合体数据类型的根本概念 8.1 结构体类型的根本概念结构体类型概述 计算机应用中特别是在事务处理中,常常需要将不同的数据组合成为一个有机的整体,这些数据不属于同种数据类型,但这些数据又相互关联,用以描述一个操作对象的各种属性。这种由一些属于不同数据类型的数据组合而成的构造数据类型称为结构体

2、类型。例如,学生登记表。 结构体类型的特点结构体类型由假设干个数据项组成,其中每一个数据项称为一个结构体成员,它们都属于一种已经定义的数据元素。 系统并没有预先定义结构体类型,须由设计者事先构造。 要使用结构体类型数据,必须要先定义结构体类型,然后再定义此种类型的变量。8.1.1 结构体类型和变量的定义定义结构体类型的一般形式: struct 结构体名 数据类型 结构体成员1; 数据类型 结构体成员2;. 数据类型 结构体成员n;; struct student char num8; char name20; char sex; int age; float Score; ;定义结构体类型变量

3、的三种方法先定义结构体类型,然后定义变量。 struct 结构体名 变量列表; 定义结构体类型的同时定义结构体变量。 struct 结构体名 结构体成员列表; 结构体变量列表; 直接定义结构体变量。 struct 结构体成员列表;结构体变量列表;8.1.1 结构体类型和变量的定义定义结构体类型变量的三种方法先定义结构体类型,然后定义变量 同时定义结构体类型和变量 只定义结构体类型变量struct A long number; char name20; int x; float y; struct A a1,a2;struct B long number; char name20; int x;

4、 float y;b1,b2; struct long number; char name20; int x; float y;c1,c2; 8.1.1 结构体类型和变量的定义结构体类型的嵌套定义 结构体类型可以嵌套定义,即定义的一个结构体类型的成员中可以有属于另外一个已经定义完成的结构体类型的变量。struct date int year; int month; int day;struct student long number; char name20; struct date birthday; int age; char address80; long tel;8.1.1 结构体类型

5、和变量的定义为已经存在的数据类型取别名 typedef 数据类型名 别名; 例:typedef int INTEGER;那么:int j,k; 等价于 INTEGER j,k; 定义构造类型时为这些类型取别名 typedef struct 结构体名 结构体成员列表; 结构体类型别名; 注意:定义别名后,程序中可使用原类型名或别名定义变量,别名习惯上用大写字母。8.1.2 关键字typedef的简单应用8.1.2 关键字typedef的简单应用struct student long number; struct date birthday; char name20; int age; char

6、sex; char address80; long tel;;typedef struct student STU;STU stu1,stu2,stu3struct student 等价于 STUtypedef struct student long number; struct date birthday; char name20; int age; char sex; char address80; long tel;STU;STU stu1,stu2,stu3;struct student stu1,stu2;使用typedef构造复杂数据类型构造指定长度的字符串数据类型typedef

7、char String100; String是字符串数据类型的类型名。 String s1; 等价于 char s1100;构造指针数据类型 typedef int *IP; 定义IP为整型的指针类型。 IP p1,p2;等价于 int *p1,*p2; 例8-1 用typedef构造指定长度的字符串类型 例8-3 用typedef构造指针数据类型。8.1.2 关键字typedef的简单应用8.1.3 结构体变量的引用和输入输出结构体变量的引用 C语言不允许将结构体变量作为整体操作,只能操作它的成员分量。成员分量的引用形式如下: 结构体变量名.成员名 例如:stu1.sex stu1.tel

8、对于嵌套的结构体变量,访问其成员时应采用逐级访问的方法,直到得到所需访问的成员为止。结构体变量名.一级成员名.二级成员名 例如:stu1.birthday.month 当有两个同类型结构体变量时,可将一个结构体变量作为一个整体赋值给另外一个结构体变量。 特别提示:嵌套的结构体成员分量的数据类型与最后一个成员分量的数据类型一致。 例:设有结构体类型及变量定义 struct A int x; float y; ; struct B struct A a; char c; ; struct B b;则有:b.a.x 整型变量 b.a.y 实型变量b.c 字符型变量8.1.3 结构体变量的引用和输入输

9、出结构体变量的初始化 定义结构体变量的同时初始化: struct 标识符 变量名=结构体变量成员值列表; struct student stu2,stu1=5001,1988,12,30,Liwei,19,m,12 songlin,65102621; stu2=stu1; /两个同类型结构体变量的整体赋值结构体变量的输入输出 结构体变量不能作为一个整体进行输入或输出。只能将结构体变量的成员作为输入输出的对象。 例8-5 结构体变量引用和输入输出例如8.1.3 结构体变量的引用和输入输出8.1.4 结构体变量作函数参数结构体变量作为函数参数结构体变量可以作为函数的参数在函数之间进行传递。使用结构

10、体变量作为函数参数时,数据的传递仍然是“传值方式;要求实参和形参的类型须一致。实现方式:函数调用时系统为形参变量开辟一段内存单元按照结构体变量所需要的存储单元数以存放从实参传递过去的各结构体变量成员分量的值。 例8-6 结构体变量作函数参数例如struct TEST int x; char ch;实参 struct TEST a;aa.xa.chbb.xb.ch形参 struct TEST b;10aa108.1.5 结构体作函数的返回值类型返回结构体类型函数概念结构体类型的数据对象不但能作为函数参数在函数之间传递,还可以作为函数的返回值。当函数的返回值类型是一个结构体类型时,该函数就称为返回

11、结构体类型的函数。函数定义形式 struct 标识符 函数名(形式参数表及定义) 函数的定义和声明局部; 函数的执行局部; 例8-7 返回结构体类型函数的例如结构体类型和联合体类型 结构体数据类型的根本概念 结构体数组 结构体数据类型与指针的关系联合体数据类型的根本概念 结构体数组的概念 结构体数组中的每一个数组元素都是具有相同结构体类型的结构体变量。 如一个班的学生档案,某单位的工资表。 结构体数组的定义定义结构体数组的方式与定义结构体变量相同,只须说明它为数组类型。也有三种方法: struct 结构体名 数组名常量表达式; 使用typedef为结构体类型名取别名来定义结构体数组。 STU

12、stu130; 8.2.1 结构体数组的定义和元素引用 结构体数组的初始化 定义结构体数组的同时进行初始化 初始化的一般形式为: struct 结构体名 数组名=初始化数据列表;8.2.1 结构体数组的定义和元素引用 例:设有结构体类型定义 sturct person char name20; int count; ; sturct person stu3=“Zhang,0, “Wang,0, “Li,0;结构体数组元素的引用一个结构体数组元素就相当于一个结构体变量,其引用某一元素成员的方法与引用结构体变量成员的方法相同。其形式为: 数组名下标.成员名 不能将结构体数组元素作为一个整体直接进行

13、输入输出 可以将一个结构体数组元素作为一个整体赋给同一结构体数组的另外一个元素,或赋给一个同类型的结构体变量。 例8-8 结构体数组操作例如8.2.1 结构体数组的定义和元素引用 结构体数组作函数参数结构体数组可以作为函数的参数在函数间进行传递。使用结构体数组作为函数参数时,实现的是“传地址值调用。即实参数组将全部或局部存储区域提供给形参数组共享。 例8-9 结构体数组作函数参数例如struct A int x; char c; ;a(实参:struct A a3;)b(形参:struct A b) 8.2.1 结构体数组的定义和元素引用 结构体类型和联合体类型 结构体数据类型的根本概念 结构

14、体数组 结构体数据类型与指针的关系联合体数据类型的根本概念 8.3.1 结构体类型与指针的关系指向结构体变量的指针 通过指针变量访问结构体变量的成员形式: *指针变量.成员名; 指针变量名-成员名;struct A int x; float y;a1,*p=&a1; &a1 = pa1 = *p a1.x (*p).x a1.y (*p).y p-x p-ystruct person char name20; int count;stu, *p=&stu;p&stustu*p8.3.1 结构体类型与指针的关系指针变量p与结构体变量stu的关系stu.countstu执行赋值语

15、句:P-name=“liu;P-count=33;Liu33用结构体指针作为函数的参数 用指向结构体变量的指针作为函数的参数,实现的是“传地址值调用,可以提高程序的执行效率。typedef struct stu char name20; int age; float score;STU;实参 STU st3,*P=st;st0wang形参 STU *X;Xp8719chenzhao20998818st1st2P-nameP-score8.3.1 结构体类型与指针的关系例8-10 输入假设干个学生信息并输出 8.3.2 结构体数组与指针的关系指向结构体数组的指针 指针指向结构体数组中某个数组元素

16、struct A char c; int x;a5,*p1;p1=&a2;&a2 = p1a2 = *p1 a2.c (*p1).c a2.x (*p1).x p1-c p1-xap1例8-11 移动指向结构体数组的指针操作结构体数组元素。指向结构体数组的指针 指针指向某结构体数组的首地址(指针未移动)&ai = p2+i ai = *(p2+i) ai.c (*(p2+i).c ai.x (*(p2+i).x (p2+i)-c (p2+i)-xstruct A char c; int x;a5,*p2;p2=a;8.3.2 结构体数组与指针的关系ap2例8-12 不移动指向结构体数组的指针操

17、作结构体数组元素。结构体类型和联合体类型 结构体数据类型的根本概念 结构体数组 结构体数据类型与指针的关系联合体数据类型的根本概念 8.5 联合体数据类型的根本概念 问题的提出及对策问题的提出在计算机应用中,常常遇到数据对象的某一个区域值会随条件不同而为不同内容。此时要求增加同一存储区域数据类型的可变性来处理。 解决方法 C语言通过定义联合体共用体类型数据,允许不同数据类型的数据使用共同的存储区域。 8.5.1 联合体类型的定义和变量引用 联合体(共用体)类型的定义联合体类型的定义确定了参与共用存储区域的成员项以及成员项具有的数据类型。 联合体类型的定义形式:union 标识符 数据类型 成员

18、项1; 数据类型 成员项2; 数据类型 成员项n; 定义联合体变量的三种方式 先定义联合体类型,后定义联合体类型变量; union 联合体名成员列表;union 联合体名 变量列表; 同时定义联合体类型和联合体类型变量; union 联合体名 成员列表;变量列表; 直接定义联合体类型变量; union成员列表;变量列表; 8.5.1 联合体类型的定义和变量引用 同时定义联合体类型和变量union test int a; long b;key; 定义了一个联合体类型union test和该类型的联合体类型变量key, 32位系统中该类型所占的存储单元长度为8个字节,由变量key的两个成员分量分时复用共享。 8.5.1 联合体类型的定义和变量引用 联合体变量的引用联合体变量不能直接用于操作处理,只能操作它的成员。引用联合体变量成员项形式如下: 联合体变量名.成员名;特别提示:一个联合体变量不是同时存放多个成员的值,而只能存放一个成员项的值,即联合体变量最后一次赋值后的内容。联合体类型指针变量可以定义指向联合体变量的指针。例8-15 联合体变量引用例如8.5.1 联合体类型的定义和变量引用 8.5.2 联合体类型与结构体类型的区别 变量的存储长度不同结构体变量所占内存长度取决于所有成员分量占用的内存长

温馨提示

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

评论

0/150

提交评论