第9章 结构体与联合体.ppt_第1页
第9章 结构体与联合体.ppt_第2页
第9章 结构体与联合体.ppt_第3页
第9章 结构体与联合体.ppt_第4页
第9章 结构体与联合体.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第九章结构体和联合体,9.1结构体类型变量,结构类型变量定义有两个茄子方面。首先,必须定义结构类型以确定该类型中包含哪些成员,以及每个成员属于哪些数据类型。然后定义属于结构类型的变量。9.1.1结构类型变量的定义,1 .结构类型定义结构类型的一般形式如下:结构类型名称成员表;其中,“成员”(members)表格定义了该类型的成员及其所属的数据类型。2 .在“定义核心类型变量”程序中,可以定义核心类型,然后定义属于该核心类型的变量。定义核心类型变量的常用格式是struct核心类型名称变量表。定义核心类型与定义核心类型变量无关。使用c语言,您还可以在定义结构类型的同时定义结构类型变量。Struct

2、结构类型名称成员表变量表格式。c语言还允许您定义自己的结构类型变量。Struct成员表变量表格式。可以在程序中定义和引用特定核心类型的变量。核心变数的一般参照如下:核心变数名称。成员名称中的“.”是核心成员运算符,具有最高优先级。引用核心变量时,可以看到通常逐个引用成员。9.1.2核心类型变量的引用,C语言约定,核心类型的定义可以嵌套,9.1.3核心的嵌套可以像常规变量一样,在定义核心类型变量时将初始值指定给核心类型变量。但是,C语言规定只能初始化全局或静态本地核心类型变量。要将结构类型变量定义为静态存储类型,必须在定义时添加static关键字。但是,目前大多数电脑系统不需要在初始化结构类型变

3、量时添加static关键字。这与常规数组初始化的原理相同。9.1.4核心类型变量的初始化与初始化核心类型变量时的常规数组相同,但核心变量中每个成员的数据类型可以不同,但是常规数组中的元素类型是相同的。与基本数据类型的变量一样,结构类型的变量也可以用作函数参数,结构类型的函数也可以定义。9.1.5结构和函数,1 .结构类型变量的成员可以作为函数参数(与作为函数参数的数组元素一样),结构类型变量的成员可以作为函数参数。在牙齿的情况下,调用函数的形式参数是一般变量,调用函数的实际参数是结构类型变量的成员,但类型必须匹配。2 .核心类型变量作为函数参数与常规变量一样,核心类型的变量也可以作为函数参数使

4、用。对于牙齿,调用函数的形式参数是结构类型的变量,调用函数的实际参数也是结构类型的变量,但必须属于同一结构类型。3 .与定义标准数据类型函数一样,核心类型的函数也可以在C语言中定义核心类型的函数。核心类型函数的返回值是核心类型的数据。与、9.2核心阵列、整数阵列、实数阵列、文字阵列类似,您可以在程式中定义核心类型的阵列。但是C语言规定,同一结构体数组的元素必须是同一结构体类型。9.2.1核心数组的定义和引用,与常规数组一样,核心类型数组也可以用作函数参数,与实际参数组合的方式相同。在调用的函数中更改核心类型参数组元素的成员值时,实际上还会更改核心类型实际参数数组元素的各个成员值。这是因为核心类

5、型参数组与核心类型实际参数阵列的存储空间相同。,函数参数为9.2.2结构数组、9.3结构和指针,结构类型的指针变量指向结构类型变量或数组(或数组元素)的起始地址。9.3.1核心类型指标变数的定义和参考,核心类型指标变数P指向核心类型变数时,以下三种茄子表现法相同:核心变数名称。成员(*p)。成员P成员都表示核心变量的成员。核心类型指针可以指向核心类型的变量,因此,如果格式参数是核心类型指针变量,则实际参数也可以是核心类型指针(地址)。当核心类型指针作为函数参数传递时,地址被传递,因此,如果在调用函数中更改核心类型格式引用指针所指向的地址的值,核心类型实际引用指针所指向的地址的值也会发生变化。9

6、.3.2结构类型指针作为函数参数,结构类型指针也可以指向数组或数组元素,因此,如果格式参数是结构类型指针变量,则实际参数也可以是结构类型数组名称或数组元素的地址。与标准数据类型的数组和指针一样,当结构类型数组指针用作函数参数时,可能会出现以下四种茄子情况:(1)实际参与形式参数均使用结构类型数组名称。(2)实际参考结构类型数组名、格式参考结构类型指针变量;(3)实际参与参数使用结构类型指针变量。(4)实际参考核心类型指标变数,格式参考核心类型阵列名称。9.4链表和1链表的常规结构链表由节点元素组成。为了适应连接列表的存储结构,电脑储存空间划分为较小的块,每个块占用几个字节,通常这种小块称为存储

7、节点。将存储空间中的每个存储节点分为两部分。用于存储数据元素的部分值称为数据字段。另一部分是存储序列号(即存储节点的地址),用于存储称为指针字段的下一个数据元素。9.4.1关联列表的基本概念,在关联表中使用特殊指针HEAD指向关联表中第一个数据元素的节点(即存储第一个数据元素的存储节点的序列号)。连接列表中最后一个元素的后面没有节点元素,因此,如果连接列表中最后一个节点的指针字段为空(显示为NULL或0),连接的表将终止。2节点结构类型的定义在C语言中,定义链表节点结构的通用格式如下:struct结构名称数据成员表;Struct结构名称*指针变量名称;在C语言中,3节点的动态分配可以使用mal

8、loc函数为连接的表节点分配存储空间。牙齿函数返回存储阵列的第一个地址,格式为malloc(存储字节数)。1在连接的列表中查找指定元素在插入或删除连接的列表的操作中,必须始终首先查找插入或删除的位置。为此,必须扫描连接的列表以查找包含指定元素值的上一个节点。找到包含指定元素的旧节点后,可以在该节点后插入新节点或删除该节点后的节点。9.4.2连接列表的默认操作,2插入连接列表的连接表格意味着在原始连接列表的指定元素之前插入新元素。要在连接的列表中包含元素x的节点之前插入新元素b,请执行以下操作:插入过程如下:(1)使用malloc()函数请求新节点P,并将该节点的数据字段设置为B。可以创建Pdb

9、。(2)在连接的列表中找到包含元素X的上一个节点,将该节点的存储地址设置为Q。连接的列表如图8.3(b)所示。(3)最后,将节点P插入节点Q之后。为此,如果使节点P指向包含元素X的节点(节点Q的后续点),pnextqnext会将节点Q的指针域内容更改为节点P。qnextp、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3要从连接的列表中删除包含指定元素的节点,请先在连接的列表中找到该节点,然后将要删除的节点放回可用堆栈中。要从连接的列表中删除包含元素x的节点,请执行以下操作:卸载过程如下:(1)在连接的列表中,找到包含元素X的上一个节点,然后将该节点地址设置为Q。包含元素x的

10、节点地址pqnext。(2)从连接的列表中删除节点Q后面的节点P。也就是说,如果节点Q的指针指向包含元素X的节点P的指针,则qnextpnext (3)可以释放包含元素X的节点P。牙齿时,已连接列表的删除操作完成。和C语言的集成数据类型满足了这些要求。联合体也称为共享体,意味着各种数据共享相同的存储空间。与结构一样,要定义联合体类型变量,请首先定义联合体类型,描述联合体类型中包含的成员,描述每个成员所属的数据类型,然后定义该类型的变量。9.5联合体,定义联合体数据类型的典型格式是union联合体名称成员表。联合体类型变量的一些茄子说明如下:(1)联合体变量的每个成员共享存储空间,因此,一次只能

11、在该变量中存储一种茄子类型的数据。也就是说,只有一个成员的数据有意义,其他成员的数据没有意义。(2)在引用联合体变量的成员时,必须保证数据的一致性。(3)定义联合体变量时不能初始化,联合体变量不能用作函数参数。(4)联合体类型和核心类型可以徐璐嵌套。也就是说,联合体类型可以是核心类型的成员,核心类型可以是联合体类型的成员。9.6枚举类型和用户定义的类型名称,(1)首先定义枚举类型,然后定义该枚举类型的变量。定义枚举类型的常用格式是enum枚举类型名称枚举元素的列表。该类型的所有元素(即枚举常量)在枚举元素列表中按顺序列出,如果未在定义中明确指定这些元素的值,则值为0、1、2。(2)定义枚举类型时,定义该枚举类型的变量。牙齿定义方法的典型格式是enum枚举类型名称枚举元素列表变量表格。(3)直接定义枚举类型变量。牙齿定义方法的典型格式是enum枚举元素列表变量表。9.6.1枚举类型,使用枚举类型数据时需要注意的几个茄子问题:(1)枚举元素本身是常量(即枚举常量),因此无法在枚举元素中指定值。(2)虽然程序不能为枚举元素指定值,但实际上每个枚举元素都有指定的整数值。(3)C语言允许通过强制类型转换将整数值分配给枚举类型变量。您可以使用c程序提

温馨提示

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

评论

0/150

提交评论