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

上传人:宝路 文档编号:48187014 上传时间:2018-07-11 格式:PPT 页数:85 大小:415.07KB
返回 下载 相关 举报
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 枚举类型28.1.1结构类型的定义一. 结构类型的概念前面的我们学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学习了数组(一维、 二维)的定义和应用,这些数据类型的特点是:当定 义某一特定数据类型,就限定该类型变量的存储特性 和取值范围。 在日常生活中,我们常会遇到一些需要填写的登记表,如成绩表、通讯地址、员工信息等。其数据类 型可能由性质不同的成员组成。3结构类型的概念numbernameSexdepartmentagewage 1wage290

2、08806Li FangFInformatio18850780 9008807Lin HongFPersonnel16900760 900880 8Wu Qiang MTechnical189507909008809Li JunMPersonnel17880760 900881 0Zhang Xia FTechnical17870795l上表中数据是由员工的工作证号(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等不同类型的数据项。结构类型的概念51结构体类型说明的一般形式struct 标识符 结构成员列表;; 说明:(1) struct是关键字,声明要定义一个结构类型,结构类 型名用标示符命名,要“见名知义”;(2)成员列表给出n

4、个成员声明,成员可以基本类型变 量、数组,也可以是另一结构类型变量等,对每个成员 必须作类型说明,成员之间用分号分隔;二. 结构体类型及结构体变量6l l学生的基本信息,学生的基本信息,包括包括学号、姓名、学号、姓名、性别、年龄、班级性别、年龄、班级、成绩、成绩等数据项。等数据项。l l这些数据项描述了这些数据项描述了一个学生的几个不一个学生的几个不同侧面。同侧面。 nonamesexageclassnograde独立的变量: 数据项之间无关联nonamesexageclassnograde数据项为一个整体数据项为一个整体struct student char no9; /学号char nam

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

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

7、。struct int year;int month;int day; birthday;无名的结构类型 必须后随结构变量( 如birthday)的定义, 并且仅能一处使用, 这种形式通常用于内 嵌在结构类型中的结 构类型。(5)可以用sizeof运算符来计算结构类型的长度(字节数) 例如:printf(“%d”,sizeof(struct Student); 结果为18结构类型的几点说明111.结构类型数据对象包括一般变量、指针、数组等, 对于成为结构变量、结构指针、结构数组等可以在说明 语句中用已定义的结构类型定义结构数据对象,也可以 在定义结构类型的同时定义结构数据对象。8.1.2结构类

8、型数据对象的定义及初始化struct date int month; int day; int year; ; ;struct staff char number8;struct date birthday; char sex; ;定义了结构类型之后, 还必须定义结构类型变量, 类型与变量 是不同的概念。122结构类型变量的三种定义方式(1) 在说明结构类型的同时, 也定义了结构类型变量 例如: struct bookint num;char name60;float price; book1, books3;n在说明结构类型名struct book的同时,定义了结构类型 变量book1与结构

9、类型数组books, 数组books有三个元 素:books0、books1、books2。结构类型数据对象的定义及初始化13(2) 先说明结构类型, 再单独 进行变量定义 例如: struct staff char name10; char sex; float wage2; ;. struct staff worker1, worker2;(3) 省略结构标识符, 直接定 义变量 例如: struct /* 此处没有标识 符*/ int month; char day; unsigned year; d5;没有标识符一定要在定 义结构类型的同时定义变 量。结构类型数据对象的定义及初始化14

10、定义了结构类型: struce Student 后定义不同变量的 区别:struce Student s1, s2100, *s3=从上面可以看出: (1) s1是该类型的变量, s2是该类型的一维数组,s3, s4 是指向该类型变量的结构指针;(2) 结构类型的变量名不是地址.结构类型数据对象的定义及初始化153. 结构类型变量的初始化可以在定义结构类型变量的同时对其初始化,其语法格式:struct 标识符 结构变量名=成员初始化值表struct Student int numberchar name9;struct int year;int month;int day; birthday;

11、char sex; student1=1101,”lilin”,1985,8,1,M ;16定义了结构数据对象,就可以访问其中的每一个成员。 结构成员可以像基本变量那样使用,如赋值、输入输出 、参加表达式的计算等,这些操作统称为对结构成员的 访问。 1、结构成员的表示结构变量是由n个成员聚合而成的一个整体,要访问其 中的一个成员,必须同时给出整体的名称和个体成员的 名称。struct Student s1,s2100,*s3=s1是结构变量,用来存放单个学生的信息s2是结构数组,该数组包含100个类型是struct Student 的成员,这样的数组可以表示一个学生情况s3是结构指针,存放st

12、ruct Student 类型数据对象s1 的内存首地址。9.1.3结构成员的引用17(1)结构变量成员的表示:结构变量 . 成员名 (如 s1.number、s1.age) (2)结构数组元素成员的表示结构数组名下标表达式.成员名s25.name表示s2的第六个元素(结构变量)之name成 员 (3)结构指针成员的表示结构指针-成员名 (如 s3-sex) 或(*结构指针). 成员名 (如 (*s3).sex)对于多层嵌套结构成员, 有多个“”,从外向内。结构成员的引用182. 成员运算符两种成员运算符:“.”和“-” 3.嵌套结构的结构成员的表示结构成员本身又是结构变量,称为嵌套结构。必须

13、使用 若干个成员运算符来连接多个结构变量及其对应的分量 ,逐级表示到最低一级成员,该级成员是可以直接访问 的基本数据对象。例如:student1.birthday表示student1中的birthday;而 student1.birthday.year则表示student1中的birthday的 year成员注意:只能对最内层的成员进行存取、运算以及输入、输 出等操作结构成员的引用194.结构变量成员的引用结构变量的成员可以像普通变量一样进行各种运算,如赋值、输入、输出、计算及地址操作等,例如:student1.birthday.year+;student.number=11001;scanf

14、(“%d”,printf(“%d,%s,%d,%cn“,student1); printf(“%d,%s,%d,%c,%fn”,student1.number,stude nt1.name,student1.age,student1.sex);Scanf(“%d,%s,%d,%c,%f”,printf(%o,student1);输出student1的首地址21(3)可以将一个结构变量作为一个整体赋给另一个具有相 同类型的结构变量,其作用相当于逐个对位于赋值语句左 部的结构变量的每个分量赋值。如:student2=student1;等效于:student2.number=student1.num

15、ber;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/%dn“,student1.num,student1.name, student1.age, student1.sex,student1.birthday1.m,stu

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

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