第11章结构体与共用体
1 第11章 结构体与共用体
111概述 C语言定义的几种基本数据类型,它们有规定 的类型说明符、数据长度及数据组织和存储形式 程序设计时可直接用它们来定义数据对象。 在实际应用中仅有这些基本数据类型是不够的, 为了增强数据的表示能力能够使用各种数据,常需 要各种新的数据类型来满足问题求解的需要。 例如一个传统的例子:
2 11.1 概述 C语言定义的几种基本数据类型,它们有规定 的类型说明符、数据长度及数据组织和存储形式, 程序设计时可直接用它们来定义数据对象。 在实际应用中仅有这些基本数据类型是不够的, 为了增强数据的表示能力,能够使用各种数据,常需 要各种新的数据类型来满足问题求解的需要。 例如,一个传统的例子:
假定要建立员工的简单档案为了反映每一个员 工的基本情况如果把员工的姓名、性别、年龄、 职称、工资、电话号码和家庭住址等不同类型的 数据项分别用单独的变量表示,就不能很好地反 映与一员工相关的诸数据项之间的关系,且很难 有效地组织、处理和使用它们
3 假定要建立员工的简单档案,为了反映每一个员 工的基本情况,如果把员工的姓名、性别、年龄、 职称、 工资、电话号码和家庭住址等不同类型的 数据项分别用单独的变量表示, 就不能很好地反 映与一员工相关的诸数据项之间的关系, 且很难 有效地组织、处理和使用它们
如果能把这些相关的数据项组织在一起定义成 一种新的、独立的数据类型,再定义一个实际的对 象与之相联系,那么这个对象便代表了某个员工,访 问这个对象就可获得该员工的全部信息。显然这对 组织、处理复杂的数据十分便利有效的。 为了能满足这类问题的需要,C语言允许用户 自定义各种不同的数据类型,并用它们定义与之相 关的对象。 本章将讨论用户自定义数据类型的定义及相应 数据对象的定义和使用
4 如果能把这些相关的数据项组织在一起, 定义成 一种新的、独立的数据类型,再定义一个实际的对 象与之相联系,那么这个对象便代表了某个员工,访 问这个对象就可获得该员工的全部信息。显然这对 组织、处理复杂的数据十分便利有效的。 为了能满足这类问题的需要 ,C语言允许用户 自定义各种不同的数据类型, 并用它们定义与之相 关的对象。 本章将讨论用户自定义数据类型的定义及相应 数据对象的定义和使用
12定义结构体类型及结构变量的方法 什么是结构类型 一个结构是将一个或多个不同类型的数据有序 地组织在一起,并为之确定一个名字所构成的 种数据类型。 不同名的结构代表一种不同的数据类型,即使 两个结构具有完全相同的成员项,但结构名字不 同也表示两种不同的数据类型
5 11.2 定义结构体类型及结构变量的方法 1、 什么是结构类型? 一个结构是将一个或多个不同类型的数据有序 地组织在一起,并为之确定一个名字所构成的一 种数据类型。 不同名的结构代表一种不同的数据类型,即使 两个结构具有完全相同的成员项,但结构名字不 同也表示两种不同的数据类型
定义一个结构就是命名一个结构并说明它的组 成情况。目的是让程序中的函数知道,存在这样的 种数据类型,可用它来定义与之相关的数据对象。 结构的一般定义形式为: struct结构类型名{ 数据类型1成员名1; 数据类型2成员名2 数据类型n成员名n
6 定义一个结构就是命名一个结构并说明它的组 成情况。目的是让程序中的函数知道,存在这样的 一种数据类型,可用它来定义与之相关的数据对象。 结构的一般定义形式为: struct 结构类型名{ 数据类型1 成员名1 ; 数据类型2 成员名2 ; ……… 数据类型n 成员名n ; } ;
其中 struct 指出一个结构定义的开始; 结构类型名 是对该结构类型的命名,按标识符的构成 规则确定; 一对括号中定义了组成该结构类型的诸成 员项,每个成员项由成员的名字、成员的 数据类型和一个分号组成。一个结构中成 员项的多少、顺序没有限制
7 其中: struct 指出一个结构定义的开始; 结构类型名 是对该结构类型的命名,按标识符的构成 规则确定; {…} 一对括号中定义了组成该结构类型的诸成 员项,每个成员项由成员的名字、成员的 数据类型和一个分号组成。一个结构中成 员项的多少、顺序没有限制
数据类型; 用来指出对应成员项的数据类型,它可以是 任何数据类型名: ■C中固有的那些数据类型说明符,如int、foat char、 double等; ■也可以是本程序中已经定义的另一个结构类型 名,因结构名是一种自定义数据类型名; 特别,“数据类型”还可以是本身的结构类型名 但其后的成员名只能是指针变量名,非指针变量 名是错误的
8 C中固有的那些数据类型说明符,如int、float、 char、double等; 也可以是本程序中已经定义的另一个结构类型 名,因结构名是一种自定义数据类型名; 特别, “数据类型i” 还可以是本身的结构类型名 , 但其后的成员名只能是指针变量名,非指针变量 名是错误的。 数据类型i 用来指出对应成员项的数据类型,它可以是 任何数据类型名:
成员名 按标识符组成规则确定。“成员名”和“结构 类型名”可与函数或程序中的其他对象名及其他结 构中的成员名相同,不产生矛盾。C编译程序总是 根据上、下文来区别它们。 结构定义形式是一个整体,在程序中是作为 个定义语句(声明语句)出现的。因此括住诸成员 项说明的一对大括号和最后的分号不能遗漏,否则 引起错误
9 按标识符组成规则确定。 “成员名i” 和 “结构 类型名” 可与函数或程序中的其他对象名及其他结 构中的成员名相同, 不产生矛盾。C编译程序总是 根据上、下文来区别它们。 成员名i 结构定义形式是一个整体,在程序中是作为一 个定义语句(声明语句) 出现的。因此括住诸成员 项说明的一对大括号和最后的分号不能遗漏,否则 引起错误
又因为它是一个声明语句,所以一个结构定义 可以在函数的内部和函数的外部进行。 最后必须强调,上述形式的结构定义仅是描述 了一个结构的组成情况,或者说只是定义了一种类 型为“结构类型名”的数据类型,c编译程序并不 给这样的定义分配对应的空间,因为它不是一个实 际的数据对象。 下面是一个结构定义的典型例子
10 又因为它是一个声明语句,所以一个结构定义 可以在函数的内部和函数的外部进行。 最后必须强调,上述形式的结构定义仅是描述 了一个结构的组成情况, 或者说只是定义了一种类 型为 “结构类型名”的数据类型,C编译程序并不 给这样的定义分配对应的空间,因为它不是一个实 际的数据对象。 下面是一个结构定义的典型例子