章结构体类型和联合体类型——C语言程序设计技术.pptx

上传人:莉*** 文档编号:88387643 上传时间:2023-04-25 格式:PPTX 页数:36 大小:212.96KB
返回 下载 相关 举报
章结构体类型和联合体类型——C语言程序设计技术.pptx_第1页
第1页 / 共36页
章结构体类型和联合体类型——C语言程序设计技术.pptx_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《章结构体类型和联合体类型——C语言程序设计技术.pptx》由会员分享,可在线阅读,更多相关《章结构体类型和联合体类型——C语言程序设计技术.pptx(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、结构体类型和联合体类型 n n结构体数据类型的基本概念结构体数据类型的基本概念 n n结构体数组结构体数组 n n结构体数据类型与指针的关系结构体数据类型与指针的关系n n联合体数据类型的基本概念联合体数据类型的基本概念 第1页/共36页8.1 8.1 结构体类型的基本概念结构体类型的基本概念结构体类型概述 计算机应用中特别是在事务处理中,常常需要将不同的数据组合成为一个有机的整体,这些数据不属于同种数据类型,但这些数据又相互关联,用以描述一个操作对象的各种属性。这种由一些属于不同数据类型的数据组合而成的构造数据类型称为结构体类型。例如,学生登记表。结构体类型的特点 结构体类型由若干个数据项组

2、成,其中每一个数据项称为一个结构体成员,它结构体类型由若干个数据项组成,其中每一个数据项称为一个结构体成员,它们都属于一种已经定义的数据元素。们都属于一种已经定义的数据元素。系统并没有预先定义结构体类型,须由设计者事先构造。系统并没有预先定义结构体类型,须由设计者事先构造。要使用结构体类型数据,必须要先定义结构体类型,然后再定义此种类型的变要使用结构体类型数据,必须要先定义结构体类型,然后再定义此种类型的变量。量。第2页/共36页8.1.1 8.1.1 结构体类型和变量的定义结构体类型和变量的定义定义结构体类型的一般形式:struct 结构体名 数据类型 结构体成员1;数据类型 结构体成员2;

3、.数据类型 结构体成员n;;struct studentstruct student char num8;char num8;char name20;char name20;char sex;char sex;int age;int age;float Score;float Score;第3页/共36页定义结构体类型变量的三种方法 先定义结构体类型,然后定义变量。先定义结构体类型,然后定义变量。struct struct 结构体名结构体名 变量列表;变量列表;定义结构体类型的同时定义结构体变量。定义结构体类型的同时定义结构体变量。struct struct 结构体名结构体名 结构体成员列表;

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

5、mber;char name20;int x;float y;b1,b2;struct long number;char name20;int x;float y;c1,c2;8.1.1 8.1.1 结构体类型和变量的定义第5页/共36页结构体类型的嵌套定义 结构体类型可以嵌套定义,即定义的一个结构体类型的成员中可以有属于另外一个已经定义完成的结构体类型的变量。struct datestruct datestruct datestruct date int year;int year;int year;int year;int month;int month;int month;int mon

6、th;int day;int day;int day;int day;struct studentstruct studentstruct studentstruct student long number;long number;long number;long number;char name20;char name20;char name20;char name20;struct date struct date struct date struct date birthday;birthday;birthday;birthday;int age;int age;int age;int

7、age;char address80;char address80;char address80;char address80;long tel;long tel;long tel;long tel;8.1.1 8.1.1 结构体类型和变量的定义第6页/共36页为已经存在的数据类型取别名 typedef typedef 数据类型名数据类型名 别名;别名;例:例:typedef int INTEGERtypedef int INTEGER;则:则:int j,k;int j,k;等价于等价于 INTEGER j,k;INTEGER j,k;定义构造类型时为这些类型取别名 typedef stru

8、ct typedef struct 结构体名结构体名 结构体成员列表;结构体成员列表;结构体类型别名;结构体类型别名;注意:定义别名后,程序中可使用原类型名或别名定义变量,别名习惯上用大写字母。8.1.2 8.1.2 关键字typedeftypedef的简单应用第7页/共36页8.1.2 8.1.2 关键字typedeftypedef的简单应用struct studentstruct student long number;long number;struct date birthday;struct date birthday;char name20;char name20;int age;

9、int age;char sex;char sex;char address80;char address80;long tel;long tel;;typedeftypedeftypedeftypedef struct studentstruct studentstruct studentstruct student STUSTU;STUSTU stu1,stu2,stu3 stu1,stu2,stu3struct studentstruct studentstruct studentstruct student 等价于等价于等价于等价于 STUSTUtypedeftypedeftypede

10、ftypedef struct student struct student long number;long number;struct date birthday;struct date birthday;char name20;char name20;int age;int age;char sex;char sex;char address80;char address80;long tel;long tel;STUSTU;STUSTU stu1,stu2,stu3;stu1,stu2,stu3;struct student stu1,stu2;struct student stu1,

11、stu2;struct student stu1,stu2;struct student stu1,stu2;第8页/共36页使用typedef构造复杂数据类型 构造指定长度的字符串数据类型构造指定长度的字符串数据类型typedef char String100;typedef char String100;StringString是字符串数据类型的类型名。是字符串数据类型的类型名。String s1;String s1;等价于等价于 char s1100;char s1100;构造指针数据类型构造指针数据类型 typedef int*IP;定义IP为整型的指针类型。IP p1,p2;等价于

12、int*p1,*p2;例8-1 用typedef构造指定长度的字符串类型 例8-3 用typedef构造指针数据类型。8.1.2 8.1.2 关键字typedeftypedef的简单应用第9页/共36页8.1.3 8.1.3 结构体变量的引用和输入输出结构体变量的引用和输入输出结构体变量的引用 C语言不允许将结构体变量作为整体操作,只能操作它的成员分量。成员分量的引用形式如下:结构体变量名.成员名 例如:stu1.sex stu1.tel 对于嵌套的结构体变量,访问其成员时应采用对于嵌套的结构体变量,访问其成员时应采用逐级访问的方法,直到得到所需访问的成员为逐级访问的方法,直到得到所需访问的成

13、员为止。止。结构体变量名结构体变量名.一级成员名一级成员名.二级成员名二级成员名 例如:例如:stu1.birthday.month stu1.birthday.month 当有两个同类型结构体变量时,可将一个结构当有两个同类型结构体变量时,可将一个结构体变量作为一个整体赋值给另外一个结构体变体变量作为一个整体赋值给另外一个结构体变量。量。第10页/共36页特别提示:特别提示:特别提示:特别提示:嵌套的结构体成员分量的数据类型与最后一个成嵌套的结构体成员分量的数据类型与最后一个成嵌套的结构体成员分量的数据类型与最后一个成嵌套的结构体成员分量的数据类型与最后一个成员分量的数据类型一致。员分量的数

14、据类型一致。员分量的数据类型一致。员分量的数据类型一致。例:设有结构体类型及变量定义例:设有结构体类型及变量定义例:设有结构体类型及变量定义例:设有结构体类型及变量定义 struct Astruct A int x;int x;float y;float y;struct B struct B struct A a;struct A a;char c;char c;struct B b;struct B b;struct B b;struct B b;则有:则有:则有:则有:b.a.xb.a.xb.a.xb.a.x 整型变量整型变量整型变量整型变量 b.a.yb.a.yb.a.yb.a.y 实

15、型变量实型变量实型变量实型变量b.cb.cb.cb.c 字符型变量字符型变量字符型变量字符型变量8.1.3 8.1.3 结构体变量的引用和输入输出第11页/共36页结构体变量的初始化 定义结构体变量的同时初始化:struct 标识符 变量名=结构体变量成员值列表;struct student stu2,stu1=5001,1988,12,30,”Liwei”,19,m,”12 songlin”,65102621;stu2=stu1;/两个同类型结构体变量的整体赋值结构体变量的输入输出 结构体变量不能作为一个整体进行输入或输出。只能将结构体变量的成员作为输入输出的对象。例例例例8-58-58-5

16、8-5 结构体变量引用和输入输出示例结构体变量引用和输入输出示例结构体变量引用和输入输出示例结构体变量引用和输入输出示例8.1.3 8.1.3 结构体变量的引用和输入输出第12页/共36页8.1.4 8.1.4 结构体变量作函数参数结构体变量作函数参数结构体变量作为函数参数 结构体变量可以作为函数的参数在函数之间进结构体变量可以作为函数的参数在函数之间进行传递。使用结构体变量作为函数参数时,数行传递。使用结构体变量作为函数参数时,数据的传递仍然是据的传递仍然是“传值方式传值方式”;要求实参和形要求实参和形参的类型须一致。参的类型须一致。实现方式:函数调用时系统为形参变量开辟一实现方式:函数调用

17、时系统为形参变量开辟一段内存单元(按照结构体变量所需要的存储单段内存单元(按照结构体变量所需要的存储单元数)以存放从实参传递过去的各结构体变量元数)以存放从实参传递过去的各结构体变量成员分量的值。成员分量的值。例8-6 结构体变量作函数参数示例struct TEST int x;char ch;实参实参 struct TEST a;struct TEST a;aa.xa.chbb.xb.ch形参形参 struct TEST b;struct TEST b;10aa10第13页/共36页8.1.5 8.1.5 结构体作函数的返回值类型结构体作函数的返回值类型返回结构体类型函数概念结构体类型的数据

18、对象不但能作为函数参数在函数之间传递,还可以作为函数的返回值。当函数的返回值类型是一个结构体类型时,该函数就称为返回结构体类型的函数。函数定义形式 struct struct 标识符标识符 函数名函数名(形式参数表及定义形式参数表及定义)函数的定义和声明部分;函数的定义和声明部分;函数的执行部分;函数的执行部分;例例8-78-7 返回结构体类型函数的示例返回结构体类型函数的示例第14页/共36页结构体类型和联合体类型 n n结构体数据类型的基本概念结构体数据类型的基本概念 n n结构体数组结构体数组 n n结构体数据类型与指针的关系结构体数据类型与指针的关系n n联合体数据类型的基本概念联合体

19、数据类型的基本概念 第15页/共36页结构体数组的概念 结构体数组中的每一个数组元素都是具有相同结构体类型的结构体变量。如一个班的学生档案,某单位的工资表。结构体数组的定义定义结构体数组的方式与定义结构体变量相同,只须说明它为数组类型。也有三种方法:struct 结构体名 数组名常量表达式;使用typedef为结构体类型名取别名来定义结构体数组。STU stu130;8.2.1 8.2.1 结构体数组的定义和元素引用 第16页/共36页结构体数组的初始化 定义结构体数组的同时进行初始化 初始化的一般形式为:struct 结构体名 数组名=初始化数据列表;8.2.1 8.2.1 结构体数组的定义

20、和元素引用 例:设有结构体类型定义例:设有结构体类型定义例:设有结构体类型定义例:设有结构体类型定义 sturct person sturct person sturct person sturct person char name20;char name20;char name20;char name20;int count;int count;int count;int count;sturct person stu3=sturct person stu3=sturct person stu3=sturct person stu3=“ZhangZhangZhangZhang”,0,0,0,

21、0,“WangWangWangWang”,0,0,0,0,“LiLiLiLi”,0,0,0,0 ;第17页/共36页结构体数组元素的引用一个结构体数组元素就相当于一个结构体变量,一个结构体数组元素就相当于一个结构体变量,其引用某一元素成员的方法与引用结构体变量其引用某一元素成员的方法与引用结构体变量成员的方法相同。其形式为:成员的方法相同。其形式为:数组名下标.成员名 不能将结构体数组元素作为一个整体直接进行不能将结构体数组元素作为一个整体直接进行输入输出输入输出 可可以以将将一一个个结结构构体体数数组组元元素素作作为为一一个个整整体体赋赋给给同同一一结结构构体体数数组组的的另另外外一一个个元

22、元素素,或或赋赋给给一一个个同类型的结构体变量。同类型的结构体变量。例8-8 结构体数组操作示例8.2.1 8.2.1 结构体数组的定义和元素引用 第18页/共36页结构体数组作函数参数结构体数组可以作为函数的参数在函数间进行传递。使用结构体数组作为函数参数时,实现的是“传地址值调用”。即实参数组将全部或部分存储区域提供给形参数组共享。例例8-98-9 结构体数组作函数参数示例结构体数组作函数参数示例struct Astruct A int x;int x;char c;char c;a(实参:实参:实参:实参:struct A a3;)struct A a3;)b(形参:形参:形参:形参:s

23、truct A b)struct A b)8.2.1 8.2.1 结构体数组的定义和元素引用 第19页/共36页结构体类型和联合体类型 n n结构体数据类型的基本概念结构体数据类型的基本概念 n n结构体数组结构体数组 n n结构体数据类型与指针的关系结构体数据类型与指针的关系n n联合体数据类型的基本概念联合体数据类型的基本概念 第20页/共36页8.3.1 8.3.1 结构体类型与指针的关系结构体类型与指针的关系指向结构体变量的指针 通过指针变量访问结构体变量的成员形式:(*指针变量).成员名;指针变量名-成员名;struct A int x;float y;a1,*p=&a1;&a1 =

24、pa1 =*p a1.x (*p).x a1.y (*p).y p-x p-y第21页/共36页struct personstruct personstruct personstruct person char name20;char name20;char name20;char name20;int count;int count;int count;int count;stu,*p=&stu;stu,*p=&stu;stu,*p=&stu;stu,*p=&stu;p&stustu*p8.3.1 8.3.1 结构体类型与指针的关系pstu.name指针变量指针变量指针变量指针变量p p p

25、 p与结构体变量与结构体变量与结构体变量与结构体变量stustustustu的关系的关系的关系的关系stu.countstu执行赋值语句:执行赋值语句:执行赋值语句:执行赋值语句:P-P-P-P-name=name=name=name=“liuliuliuliu”;P-count=33;P-count=33;P-count=33;P-count=33;Liu33第22页/共36页用结构体指针作为函数的参数 用指向结构体变量的指针用指向结构体变量的指针作为函数的参数,实现的作为函数的参数,实现的是是“传地址值调用传地址值调用”,可以,可以提高程序的执行效率。提高程序的执行效率。typedef s

26、truct stu char name20;int age;float score;STU;实参实参实参实参 STU STU STU STU st3,*P=stst3,*P=stst3,*P=stst3,*P=st;st0wang形参形参形参形参 STU*X;STU*X;STU*X;STU*X;X Xp8719chenzhao20998818st1st2P-nameP-nameP-scoreP-score8.3.1 8.3.1 结构体类型与指针的关系例例例例8-108-108-108-10 输入若干个学生信息并输出输入若干个学生信息并输出输入若干个学生信息并输出输入若干个学生信息并输出 第23

27、页/共36页8.3.2 8.3.2 结构体数组与指针的关系结构体数组与指针的关系指向结构体数组的指针 指针指向结构体数组中某个数组元素指针指向结构体数组中某个数组元素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-118-118-118-11 移动指向结构体数组的指移动指向结构体数组的指移动指向结构体数组的指移动指向结构体数组的指针操作结构体数组元素。针操作结构体数组元素。针操作结构体数组元素。针操作结构体数组元素。第24页/共36页指向结构体数组的指针

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

29、体数组元素。第25页/共36页结构体类型和联合体类型 n n结构体数据类型的基本概念结构体数据类型的基本概念 n n结构体数组结构体数组 n n结构体数据类型与指针的关系结构体数据类型与指针的关系n n联合体数据类型的基本概念联合体数据类型的基本概念 第26页/共36页8.5 8.5 联合体数据类型的基本概念联合体数据类型的基本概念 问题的提出及对策问题的提出在计算机应用中,常常遇到数据对象的某一个区域值会随条件不同而为不同内容。此时要求增加同一存储区域数据(类型)的可变性来处理。解决方法 C语言通过定义联合体(共用体)类型数据,允许不同数据类型的数据使用共同的存储区域。第27页/共36页8.

30、5.1 8.5.1 联合体类型的定义和变量引用联合体类型的定义和变量引用 联合体(共用体)类型的定义联合体类型的定义确定了参与共用存储区域的成员项以及成员项具有的数据类型。联合体类型的定义形式:union union 标识符标识符 数据类型数据类型 成员项成员项1 1;数据类型数据类型 成员项成员项2 2;数据类型数据类型 成员项成员项n n;第28页/共36页定义联合体变量的三种方式 先定义联合体类型,后定义联合体类型变量;先定义联合体类型,后定义联合体类型变量;union union 联合体名联合体名 成员列表;成员列表;union union 联合体名联合体名 变量列表;变量列表;同时定

31、义联合体类型和联合体类型变量;同时定义联合体类型和联合体类型变量;union union 联合体名联合体名 成员列表;成员列表;变量列表;变量列表;直接定义联合体类型变量;直接定义联合体类型变量;unionunion 成员列表;成员列表;变量列表;变量列表;8.5.1 8.5.1 联合体类型的定义和变量引用 第29页/共36页同时定义联合体类型和变量同时定义联合体类型和变量union testunion test int a;int a;long b;long b;keykey;定义了一个联合体类型定义了一个联合体类型union testunion test和和该类型的联合体类型变量该类型的联

32、合体类型变量keykey,32 32位系统中该类型所占的存储单元长位系统中该类型所占的存储单元长度为度为8 8个字节,由变量个字节,由变量keykey的两个成员分的两个成员分量分时复用(共享)。量分时复用(共享)。8.5.1 8.5.1 联合体类型的定义和变量引用 第30页/共36页联合体变量的引用联合体变量不能直接用于操作处理,只能操作它的成员。引联合体变量不能直接用于操作处理,只能操作它的成员。引用联合体变量成员项形式如下:用联合体变量成员项形式如下:联合体变量名联合体变量名.成员名成员名;特别提示:特别提示:一个联合体变量不是同时存放多个成员的值,而一个联合体变量不是同时存放多个成员的值

33、,而只能存放一个成员项的值,即联合体变量最后一次赋值后的只能存放一个成员项的值,即联合体变量最后一次赋值后的内容。内容。联合体类型指针变量联合体类型指针变量可以定义指向联合体变量的指针。可以定义指向联合体变量的指针。例例例例8-158-158-158-15 联合体变量引用示例联合体变量引用示例联合体变量引用示例联合体变量引用示例8.5.1 8.5.1 联合体类型的定义和变量引用 第31页/共36页8.5.2 8.5.2 联合体类型与结构体类型的区别联合体类型与结构体类型的区别 变量的存储长度不同 结构体变量所占内存长度取决于结构体变量所占内存长度取决于所有成员分量占用的内存长度;所有成员分量占

34、用的内存长度;联合体变量所占内存长度取决于联合体变量所占内存长度取决于其占内存长度最长的成员分量;其占内存长度最长的成员分量;赋值后所呈现的状态不同 对于结构体变量,其每一个成员分量占用不同的存储空间,对某对于结构体变量,其每一个成员分量占用不同的存储空间,对某一成员的赋值与其它成员无关。一成员的赋值与其它成员无关。对于联合体变量,所有成员分量共享同一段存储区域,对某一成对于联合体变量,所有成员分量共享同一段存储区域,对某一成员的赋值会影响到其它成员。员的赋值会影响到其它成员。例例8-178-17 结构体变量与联合体变量存储空间比较结构体变量与联合体变量存储空间比较 例8-18 结构体变量与联

35、合体变量的赋值比较第32页/共36页struct A int x;char c2;a;a.x=0 x4142;a.c0=a;a.c1=b;union B int x;char c2;b;b.x=0 x4142;b.c0=a;b.c1=b;a.xa.c0a.c1 b.xb.c0b.c10 x420 x410 x61/a0 x62/b0 x420 x41 0 x61 0 x628.5.2 8.5.2 联合体类型与结构体类型的区别 16161616位系统中位系统中位系统中位系统中结构体变量结构体变量结构体变量结构体变量a a a a所占存储单元长度为所占存储单元长度为所占存储单元长度为所占存储单元长

36、度为4 4 4 4字节,字节,字节,字节,联合体变量联合体变量联合体变量联合体变量b b b b所占存储单元长度为所占存储单元长度为所占存储单元长度为所占存储单元长度为2 2 2 2字节。字节。字节。字节。第33页/共36页使用联合体变量的注意点:一个联合体变量不是同时存放多个成员的值,一个联合体变量不是同时存放多个成员的值,而是只能存放一个成员项的值,这个值就是该而是只能存放一个成员项的值,这个值就是该联合体变量最后被赋予的值。联合体变量最后被赋予的值。在两个同类型的联合体变量之间可以使用变量在两个同类型的联合体变量之间可以使用变量名直接赋值。名直接赋值。联合体变量不能初始化,不能整体引用或赋值。联合体变量不能初始化,不能整体引用或赋值。联合体的特点是地址共用。联合体中可以包含联合体的特点是地址共用。联合体中可以包含结构体成员结构体成员,结构体中也可以包含联合体成员。结构体中也可以包含联合体成员。结构体包含联合体成员 例8-16 编程实现简单的人事数据管理使用联合体变量的注意点 第34页/共36页联合体应用举例联合体应用举例联合体包含结构体成员 综合读程序第35页/共36页感谢您的观看!第36页/共36页

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

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁