结构体与联合体

上传人:jiups****uk12 文档编号:44687425 上传时间:2018-06-14 格式:PPT 页数:42 大小:2.55MB
返回 下载 相关 举报
结构体与联合体_第1页
第1页 / 共42页
结构体与联合体_第2页
第2页 / 共42页
结构体与联合体_第3页
第3页 / 共42页
结构体与联合体_第4页
第4页 / 共42页
结构体与联合体_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《结构体与联合体》由会员分享,可在线阅读,更多相关《结构体与联合体(42页珍藏版)》请在金锄头文库上搜索。

1、 定义结构类型变量包括两个方面:首先要定义结构 体类型,以便确定该类型中有哪些成员,各成员属 于什么数据类型;然后再定义属于该结构体类型的 变量。1. 定义结构体类型 定义结构体类型的一般形式如下: struct 结构体类型名 成员表;其中在“成员表”中定义了该类型中有哪些成员,各 成员属于什么数据类型。 2. 定义结构体类型变量 当在程序中定义了某个结构体类型以后,就可以 定义属于该结构体类型的变量了。 定义结构体类型变量的一般形式为 struct 结构体类型名 变量表;定义结构体类型与定义结构体类型变量是分开说明 的。C语言还允许在定义结构体类型的同时定义结 构体类型变量。其形式为 str

2、uct 结构体类型名 成员表 变量表;C语言还允许直接定义结构体类型变量。其形式为 struct 成员表 变量表;在程序中定义了某结构体类型的变量后就可以被引 用。 结构体变量的一般引用方式如下: 结构体变量名.成员名其中“.”为结构体成员运算符,它的优先级最高。由 此可以看出,在引用结构体变量时,一般是对其中 的成员逐个引用。 C语言规定,结构体类型的定义可以嵌套 与普通变量一样,在定义结构体类型变量的同时也 可以对结构体类型变量赋初值。但C语言规定,只 能对全局的或静态的局部结构体类型变量进行初始 化。为了将结构体类型变量定义为静态存储类型, 在定义时应加上static关键字。但是,目前在

3、大部 分计算机系统中,对结构体类型变量初始化时不必 加static关键字,其原理与普通数组的初始化一样 。在对结构体类型变量进行初始化时,与普通数组一 样,只不过在结构体变量中,各成员的数据类型可 以不同,而普通数组中的各元素类型是相同的。 与基本数据类型的变量一样,结构体类型的变量也 可以作为函数参数,并且,还可以定义结构体类型 的函数。1. 结构体类型变量的成员作为函数参数 与数组元素可以作为函数参数一样,结构体类型 变量中的成员也可以作为函数参数。在这种情况下 ,在被调用函数中的形参是一般变量,而调用函数 中的实参是结构体类型变量中的一个成员,但要求 它们的类型应一致。2. 结构体类型变

4、量作为函数参数 与一般变量可以作为函数参数一样,结构体类型 的变量也可以作为函数参数。在这种情况下,在被 调用函数中的形参是结构体类型的变量,调用函数 中的实参也是结构体类型的变量,但要求它们属于 同一个结构体类型。3. 结构体类型的函数 与定义标准数据类型函数一样,C语言也允许定 义结构体类型的函数。结构体类型函数的返回值是 结构体类型的数据。与整型数组、实型数组、字符型数组一样,在程序 中也可以定义结构体类型的数组。但C语言规定, 同一个结构体数组中的元素应为同一种结构体类型 。与普通数组一样,结构体类型数组也能作为函数参 数,并且形参与实参结合的方式完全一样。如果在 被调用函数中改变了结

5、构体类型形参数组元素中各 成员值,实际上也就改变了结构体类型实参数组元 素中的各成员值。因为结构体类型形参数组与结构 体类型实参数组是同一个存储空间。 结构体类型的指针变量指向结构体类型变量或数组 (或数组元素)的起始地址。当结构体类型的指针变量p指向一个结构体类型变 量后,下列3种表示是等价的: 结构体变量名.成员 (*p).成员 p成员 它们都表示结构体变量中的一个成员。 结构体类型指针可以指向结构体类型的变量,因 此,当形参是结构体类型指针变量时,实参也可以 是结构体类型指针(即地址)。在结构体类型指针 作为函数参数的情况下,由于传送的是地址,因此 ,如果在被调用函数中改变了结构体类型形

6、参指针 所指向的地址中的值,实际上也就改变了结构体类 型实参指针所指向的地址中的值。 结构体类型指针也可以指向数组或数组元素,因此,当 形参是结构体类型指针变量时,实参也可以是结构体类 型数组名或数组元素的地址。 与标准数据类型的数组与指针一样,在结构体类 型数组指针作函数参数时,也可以有以下4种情况:(1)实参与形参都用结构体类型数组名;(2)实参用结构体类型数组名,形参用结构体类型指 针变量;(3)实参与形参都用结构体类型指针变量;(4)实参用结构体类型指针变量,形参用结构体类型 数组名。1链表的一般结构 链表由结点元素组成。为了适应链表的存储 结构,计算机存储空间被划分为一个一个小块,每

7、 一小块占若干字节,通常称这些小块为存储结点。 将存储空间中的每一个存储结点分为两部分 :一部分用于存储数据元素的值,称为数据域;另 一部分用于存放下一个数据元素的存储序号(即存 储结点的地址),称为指针域。 在链表中,用一个专门的指针HEAD指向链表中第 一个数据元素的结点(即存放第一个数据元素的存 储结点的序号)。链表中最后一个元素后面已没有 结点元素,因此,链表中最后一个结点的指针域为 空(用NULL或0表示),表示链表终止。2结点结构体类型的定义 在C语言中,定义链表结点结构的一般形式如下 : struct 结构体名 数据成员表; struct 结构体名 *指针变量名; ;3结点的动态

8、分配 在C语言中,可以利用 malloc 函数向系统 申请分配链表结点的存储空间,其形式为malloc(存储区字节数) 该函数返回存储区的首地址。1在链表中查找指定元素 在对链表进行插入或删除的运算中,总是首先 需要找到插入或删除的位置,这就需要对链表进行 扫描查找,在链表中寻找包含指定元素值的前一个 结点。当找到包含指定元素的前一个结点后,就可 以在该结点后插入新结点或删除该结点后的一个结 点。2链表的插入 链表的插入是指在原链表中的指定元素之前插入 一个新元素。 要在链表中包含元素x的结点之前插入一个新元素 b。其插入过程如下:(1)用malloc()函数申请取得新结点p,并置该结点的 数

9、据域为b。即令pdb。(2)在链表中寻找包含元素x的前一个结点,设该结 点的存储地址为q。链表如图8.3(b)所示。(3)最后将结点p插入到结点q之后。为了实现这一步 ,只要改变以下两个结点的指针域内容: 使结点p指向包含元素x的结点(即结点q的后件 结点),即令pnextqnext 使结点q的指针域内容改为指向结点p,即令qnextp3链表的删除 链表的删除是指在链表中删除包含指定元素的结点。 为了在链表中删除包含指定元素的结点,首先要在链表 中找到这个结点,然后将要删除结点放回到可利用栈。 要在链表中删除包含元素x的结点。其删除过程如下: (1)在链表中寻找包含元素x的前一个结点,设该结点

10、 地址为q。则包含元素x的结点地址pqnext。 (2)将结点q后的结点p从链表中删除,即让结点q的指 针指向包含元素x的结点p的指针指向的结点,即令qnextpnext (3)将包含元素x的结点p释放。此时,链表的删除运算 完成。 C语言中中的联合数据类型可以满足这种需要。 联合体又称为共用体,意为各种不同数据共用同一 段存储空间。 与结构体类似,为了定义联合体类型变量,首 先要定义联合体类型,说明该联合体类型中包括哪 些成员,它们各属于何数据类型,然后再定义该类 型的变量。 定义联合体数据类型的一般形式为union 联合体名 成员表 ;下面对联合体类型变量作几点说明: (1)由于一个联合体

11、变量中的各成员共用一段存 储空间,因此,在任一时刻,只能有一种类型的数据存 放在该变量中,即在任一时刻,只有一个成员的数据有 意义,其他成员的数据是没有意义的。 (2)在引用联合体变量中的成员时,必须保证数据 的一致。 (3)在定义联合体变量时不能为其初始化,并且 ,联合体变量不能作为函数参数。 (4)联合体类型与结构体类型可以互相嵌套,即 联合体类型可以作为结构体类型的成员,结构体类型也 可以作为联合体类型的成员。(1)先定义枚举类型,然后定义该枚举类型的变量。 定义枚举类型的一般形式为 enum 枚举类型名 枚举元素列表 ; 其中在枚举元素列表中依次列出了该类型中所有的 元素(即枚举常量)

12、,如果在定义中没有显式地给出这些元素的值,这些元素依次取值为0,1,2,。 (2)在定义枚举类型的同时定义该枚举类型的变量 。 这种定义方法的一般形式为 enum 枚举类型名 枚举元素列表 变量表; (3)直接定义枚举类型变量。 这种定义方法的一般形式为 enum 枚举元素列表 变量表;在使用枚举类型数据时,要注意以下几个问题:(1)不能对枚举元素赋值,因为枚举元素本身就 是常量(即枚举常量)。 (2)虽然在程序中不能对枚举元素赋值,但实际 上,每个枚举元素都有一个确定的整型值。 (3)C语言允许将一个整型值经强制类型转换后赋 给枚举类型变量。 在一个C程序中,可以使用C提供的标准数据类 型名(如int,char,float,double等),也可以 使用用户自己定义的数据类型名(如结构体类型, 联合体类型,枚举类型等)。除此之外,C语言还 允许用typedef声明新的类型名来代表已有的类型 名,称为自定义类型名。 自定义类型名的一般形式为 typedef 原类型名 新类型名 ;它指定用新类型名代表原类型名。

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

当前位置:首页 > 行业资料 > 其它行业文档

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