c语言 用户自定义数据类型

上传人:shaoy****1971 文档编号:112224134 上传时间:2019-11-05 格式:PPT 页数:85 大小:414.50KB
返回 下载 相关 举报
c语言 用户自定义数据类型_第1页
第1页 / 共85页
c语言 用户自定义数据类型_第2页
第2页 / 共85页
c语言 用户自定义数据类型_第3页
第3页 / 共85页
c语言 用户自定义数据类型_第4页
第4页 / 共85页
c语言 用户自定义数据类型_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《c语言 用户自定义数据类型》由会员分享,可在线阅读,更多相关《c语言 用户自定义数据类型(85页珍藏版)》请在金锄头文库上搜索。

1、第8章 用户自定义数据类型 1 本章内容 n8.1 结构类型及其变量的定义 n8.2 结构数组 n8.3 结构和指针 n8.4 联合类型 n8.5 枚举类型 2 8.1.1结构类型的定义 一. 结构类型的概念 前面的我们学习了一些简单数据类型(整型、实 型、字符型)的定义和应用,还学习了数组(一维、 二维)的定义和应用,这些数据类型的特点是:当定 义某一特定数据类型,就限定该类型变量的存储特性 和取值范围。 在日常生活中,我们常会遇到一些需要填写的登 记表,如成绩表、通讯地址、员工信息等。其数据类 型可能由性质不同的成员组成。 3 结构类型的概念 numbernameSexdepartment

2、age wage 1 wage2 9008806Li FangFInformatio18850780 9008807Lin HongF Personnel 16900760 900880 8 Wu Qiang M Technical 18950790 9008809Li JunM Personnel 17880760 900881 0 Zhang Xia F Technical 17870795 l上表中数据是由员工的工作证号(number)、姓名(name)、 性别(sex) 、年龄(age) 、部门( department) 、工资 (wage)等数据项组成的,逻辑上相关的数据。 l在C语

3、言中,将这种由多个不同类型的数据项组合在一起形成 的数据类型,称为结构体类型。 4 我们可以创建如下的结构类型: struct staff 其中staff由用户命名 char number8; char name10; char sex; int age; char dep20; float wage2; ; 以上定义了一个结构类型struct staff(与int 同 地位),它包含了number、name、sex、age、 dep、wage等不同类型的数据项。 结构类型的概念 5 1结构体类型说明的一般形式 struct 标识符 结构成员列表; ; 说明: (1) struct是关键字,声

4、明要定义一个结构类型,结构类 型名用标示符命名,要“见名知义”; (2)成员列表给出n个成员声明,成员可以基本类型变 量、数组,也可以是另一结构类型变量等,对每个成员 必须作类型说明,成员之间用分号分隔; 二. 结构体类型及结构体变量 6 l l学生的基本信息,学生的基本信息, 包括包括学号、姓名、学号、姓名、 性别、年龄、班级性别、年龄、班级 、成绩、成绩等数据项。等数据项。 l l这些数据项描述了这些数据项描述了 一个学生的几个不一个学生的几个不 同侧面。同侧面。 nonamesexageclassnograde 独立的变量: 数据项之间无关联 nonamesexageclassnogra

5、de 数据项为一个整体数据项为一个整体 struct student char no9; /学号 char name20; /姓名 char sex; /性别 unsigned int age; /年龄 unsigned int classno; /班级 float grade; /成绩 7 2.结构类型的几点说明 (1)对于结构类型,系统不会为之分配内存。只有在定义 了结构变量后,系统才会分配内存单元给变量。 (2)结构是由若干个数据项组成,每个数据项都属于一种 已有定义的类型。每一个结构成员都不是独立的,它不 是一般的变量,而是跟结构联系在一起。 struct Student int nu

6、mber char name9; int age; char sex; ; int age; char sex; 同名的age和sex均 不会有命名冲突问题 8 (3)结构类型可以嵌套定义。所谓嵌套定义是指在一 个结构类型中可以包含另一个或一些结构类型, 通常用于结构类型的成员是一个结构变量的场合 。 name birthday sex monthdayyear 结构类型的几点说明 9 结构类型的几点说明 struct Student char name9; struct Birthday int year; int month; int day; birthday; char sex; ;

7、struct Student int number char name9; int age; char sex; ; 10 (4)允许省略结构类型名,即允许定义无类型名的结构类 型。 struct int year; int month; int day; birthday; 无名的结构类型 必须后随结构变量( 如birthday)的定义, 并且仅能一处使用, 这种形式通常用于内 嵌在结构类型中的结 构类型。 (5)可以用sizeof运算符来计算结构类型的长度(字节数) 例如:printf(“%d”,sizeof(struct Student); 结果为18 结构类型的几点说明 11 1.结构

8、类型数据对象包括一般变量、指针、数组等, 对于成为结构变量、结构指针、结构数组等可以在说明 语句中用已定义的结构类型定义结构数据对象,也可以 在定义结构类型的同时定义结构数据对象。 8.1.2结构类型数据对象的定义及初始化 struct date int month; int day; int year; ; ; struct staff char number8; struct date birthday; char sex; ; 定义了结构类型之后, 还必须定义结构类型变量, 类型与变量 是不同的概念。 12 2结构类型变量的三种定义方式 (1) 在说明结构类型的同时, 也定义了结构类型变

9、量 例如: struct book int num; char name60; float price; book1, books3; n在说明结构类型名struct book的同时,定义了结构类型 变量book1与结构类型数组books, 数组books有三个元 素:books0、books1、books2。 结构类型数据对象的定义及初始化 13 (2) 先说明结构类型, 再单独 进行变量定义 例如: struct staff char name10; char sex; float wage2; ; . struct staff worker1, worker2; (3) 省略结构标识符,

10、 直接定 义变量 例如: struct /* 此处没有标识 符*/ int month; char day; unsigned year; d5; 没有标识符一定要在定 义结构类型的同时定义变 量。 结构类型数据对象的定义及初始化 14 定义了结构类型: struce Student 后定义不同变量的 区别: struce Student s1, s2100, *s3= 从上面可以看出: (1) s1是该类型的变量, s2是该类型的一维数组, s3, s4 是指向该类型变量的结构指针; (2) 结构类型的变量名不是地址. 结构类型数据对象的定义及初始化 15 3. 结构类型变量的初始化 可以在

11、定义结构类型变量的同时对其初始化,其语法 格式:struct 标识符 结构变量名=成员初始化值表 struct Student int number char name9; struct int year; int month; int day; birthday; char sex; student1=1101,”lilin”,1985,8,1,M ; 16 定义了结构数据对象,就可以访问其中的每一个成员。 结构成员可以像基本变量那样使用,如赋值、输入输出 、参加表达式的计算等,这些操作统称为对结构成员的 访问。 1、结构成员的表示 结构变量是由n个成员聚合而成的一个整体,要访问其 中的一个

12、成员,必须同时给出整体的名称和个体成员的 名称。 struct Student s1,s2100,*s3= s1是结构变量,用来存放单个学生的信息 s2是结构数组,该数组包含100个类型是struct Student 的成员,这样的数组可以表示一个学生情况 s3是结构指针,存放struct Student 类型数据对象s1 的内存首地址。 9.1.3结构成员的引用 17 (1)结构变量成员的表示: 结构变量 . 成员名 (如 s1.number、s1.age) (2)结构数组元素成员的表示 结构数组名下标表达式.成员名 s25.name表示s2的第六个元素(结构变量)之name成 员 (3)结

13、构指针成员的表示 结构指针-成员名 (如 s3-sex) 或 (*结构指针). 成员名 (如 (*s3).sex) 对于多层嵌套结构成员, 有多个“”,从外向内。 结构成员的引用 18 2. 成员运算符 两种成员运算符:“.”和“-” 3.嵌套结构的结构成员的表示 结构成员本身又是结构变量,称为嵌套结构。必须使用 若干个成员运算符来连接多个结构变量及其对应的分量 ,逐级表示到最低一级成员,该级成员是可以直接访问 的基本数据对象。 例如:student1.birthday表示student1中的birthday;而 student1.birthday.year则表示student1中的birth

14、day的 year成员 注意:只能对最内层的成员进行存取、运算以及输入、输 出等操作 结构成员的引用 19 4.结构变量成员的引用 结构变量的成员可以像普通变量一样进行各种运算,如 赋值、输入、输出、计算及地址操作等,例如: student1.birthday.year+; student.number=11001; scanf(“%d”, printf(“%d,%s,%d,%cn“,student1); printf(“%d,%s,%d,%c,%fn”,student1.number,stude nt1.name,student1.age,student1.sex); Scanf(“%d,%

15、s,%d,%c,%f”, printf(%o,student1);输出student1的首地址 21 (3)可以将一个结构变量作为一个整体赋给另一个具有相 同类型的结构变量,其作用相当于逐个对位于赋值语句左 部的结构变量的每个分量赋值。如: student2=student1; 等效于: student2.number=student1.number; strcpy(student2.name,student1.name); student2.sex=student1.sex; 也可以把一个结构变量中的内嵌结构类型成员赋给另一个 结构变量的对应得内嵌结构类型成员,例如 student2.birthday1=student1.birthday1; (4)不允许将一组常量直接赋给一个结构变量。如: student2=“lili”,18,M,12,15,1978,010001,89; 22 例8.3 试分析以下程序的执行结果: #include struct Birthday int m; int d; int y; ; void main() struct Student student1=1001,“lili“,18,M,12,15,1982,student2; student2=student1; printf(“student1:%ld %s %d %c %d/%d/%

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

当前位置:首页 > 中学教育 > 职业教育

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