第7章C语言结构体与共用体研究.ppt
文本预览下载声明
本章主要介绍C语言中的结构体和共用体两种构造数据类型,同时介绍了枚举类型及如何用typedef定义类型。 学习重点: ? ?结构体类型与结构体变量 ? ?共用体类型与共用体变量 ? ?枚举类型与枚举变量 7.1.1 结构体的引入 前面的课程我们学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学习了数组(一维、二维)的定义和应用,这些数据类型的特点是:当定义某一特定数据类型时,就限定该类型变量的存储特性和取值范围。对简单数据类型来说,既可以定义单个的变量,也可以定义数组。而数组的全部元素都具有相同的数据类型,或者说是相同数据类型的一个集合。 在日常生活中,我们常会遇到一些需要填写的登记表,如住宿表、成绩表、通讯地址表等。在这些表中,填写的数据是不能用同一种数据类型描述的。在住宿表中我们通常会登记上姓名、性别、身份证号码等项目;在通讯地址表中我们会写下姓名、邮编、邮箱地址、电话号码、E-mail等项目。这些表中集合了多种数据,无法用前面学过的任一种数据类型完全描述,因此C语言引入了一种能集中不同数据类型于一体的数据类型——结构体类型。 7.1.2 结构体类型的定义 在上面描述的各种登记表中,让我们仔细观察一下住宿表、成绩表、通讯地址表等。 住宿表由下面的项目构成: 成绩表由下面的项目构成:通讯地址表由下面的项目构成: 这些登记表用C语言提供的结构体类型描述如下: 住宿表: struct accommod { char name[20]; /*姓名*/ char sex; /*性别*/ char job[40]; /*职业*/ int age; /*年龄*/ long number; /*身份证号码*/ }; 成绩表: struct score { char grade[20]; /*班级*/ long number; /*学号*/ char name[20]; /*姓名*/ float os; /*操作系统*/ float datastru; /*数据结构*/ float compnet; /*计算机网络*/ }; 通讯地址表: struct addr { char name[20]; char department[30]; /*部门*/ char address[30]; /*住址*/ long box; /*邮编*/ long phone; /*电话号码*/ char email[30]; /* E-mail*/ }; 这一系列对不同登记表数据结构的描述类型称为结构体类型。可以看出结构体类型属于构造数据类型。 结构体与数组类似,都是由若干分量组成的。数组是由相同类型的数组元素组成,而结构体的分量可以是不同类型的。?结构体中的分量称为结构体的成员。访问数组中的分量(元素)是通过数组的下标,而访问结构体中的成员是通过成员的名字。 在程序中使用结构体之前,首先要对结构体的组成进行描述,称为结构体的定义。结构体的定义说明了该结构体的组成成员,以及每个成员的数据类型。结构体定义的一般形式如下: struct 结构体名 { 类型说明符 成员名1; 类型说明符 成员名2; … 类型说明符 成员名n; }; 其中,关键字“struct”是结构体的标识符;“结构体名”是所定义的结构体的类型说明符,属于标识符,由用户自己定义;“{}”中包围的是组成该结构体的成员, 每个成员的数据类型既可以是简单的数据类型,也可以是复杂的构造数据类型。整个定义用分号结束,是一个完整的语句。 结构体名是可以省略的,此时定义的结构体称为无名结构体。 7.2.1 结构体变量的定义 定义一个结构体类型只是描述了此结构体的组织形式,在编译时并不为其分配存储空间,故不能对它进行赋值、存取或运算。为了能在程序中使用结构体类型的数据,应当定义结构体变量,并在其中存放具体的数据。 定义结构体变量有以下三种方式: (1) 先定义结构体类型再定义变量。 例如: struct student { int num;
显示全部