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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章 用户自定义数据类型
1
本章内容
8.1 结构类型及其变量的定义 8.2 结构数组 8.3 结构和指针 8.4 联合类型 8.5 枚举类型
2
8.1.1结构类型的定义
一. 结构类型的概念 前面的我们学习了一些简单数据类型(整型、实
型、字符型)的定义和应用,还学习了数组(一维、 二维)的定义和应用,这些数据类型的特点是:当定 义某一特定数据类型,就限定该类型变量的存储特性 和取值范围。
在日常生活中,我们常会遇到一些需要填写的登 记表,如成绩表、通讯地址、员工信息等。其数据类 型可能由性质不同的成员组成。
3
结构类型的概念
number name Sex 9008806 Li Fang F 9008807 Lin Hong F 9008808 Wu Qiang M 9008809 Li Jun M 9008810 Zhang Xia F
birthday
name
sex
month day year
9
结构类型的几点说明
struct Student { int number
char name[9]; int age; char sex; };
struct Student { char name[9];
struct Birthday { int year;
struct date {
int month; int day; int year; ; };
struct staff {
char number[8]; struct date birthday; char sex; };
定义了结构类型之后, 还必须定义结构类型变量, 类型与变 量是不同的概念。
12
型名用标示符命名,要“见名பைடு நூலகம்义”; (2)成员列表给出n个成员声明,成员可以基本类型变量、
数组,也可以是另一结构类型变量等,对每个成员必须作 类型说明,成员之间用分号分隔;
6
no
独立的变量:
name
sex
age
classno
grade
数据项之间无关联
no
name
sex
age
classno grade
学生的基本信息,
数据项为一个整体
struct student
{ char no[9];
//学号
char name[20]; //姓名
char sex;
//性别
unsigned int age; //年龄
unsigned int classno; //班级
float grade;
//成绩
}
包括学号、姓名、 性别、年龄、班级、 成绩等数据项。 这些数据项描述了 一个学生的几个不 同侧面。
以上定义了一个结构类型struct staff(与int 同 地位),它包含了number、name、sex、age、dep、 wage等不同类型的数据项。
5
二. 结构体类型及结构体变量
1.结构体类型说明的一般形式 struct [标识符] { 结构成员列表; };
说明: (1) struct是关键字,声明要定义一个结构类型,结构类
结构类型数据对象的定义及初始化
2.结构类型变量的三种定义方式 (1) 在说明结构类型的同时, 也定义了结构类型变量 例如: struct book { int num; char name[60]; float price; } book1, books[3];
在说明结构类型名struct book的同时,定义了结构类型变 量book1与结构类型数组books, 数组books有三个元素: books[0]、books[1]、books[2]。
department age Informatio 18 Personnel 16 Technical 18 Personnel 17 Technical 17
wage1 wage2
850 780 900 760 950 790 880 760 870 795
上表中数据是由员工的工作证号(number)、姓名(name)、 性别(sex) 、年龄(age) 、部门( department) 、工资(wage) 等数据项组成的,逻辑上相关的数据。
在C语言中,将这种由多个不同类型的数据项组合在一起形成 的数据类型,称为结构体类型。
4
结构类型的概念
我们可以创建如下的结构类型: struct staff 其中staff由用户命名 { char number[8]; char name[10]; char sex; int age; char dep[20]; float wage[2]; };
int month; int day; } birthday; char sex; };
10
结构类型的几点说明
(4)允许省略结构类型名,即允许定义无类型名的结构类
型。 struct
无名的结构类型
{
必须后随结构变量
int year;
(如birthday)的定义,
int month;
并且仅能一处使用,
char name[9]; int age; char sex; };
int age; char sex;
同 名的 age 和sex 均 不会有命名冲突问 题
8
结构类型的几点说明
(3)结构类型可以嵌套定义。所谓嵌套定义是指在一 个结构类型中可以包含另一个或一些结构类型,通 常用于结构类型的成员是一个结构变量的场合。
int day;
这种形式通常用于内
} birthday;
嵌在结构类型中的结
构类型。
(5)可以用sizeof运算符来计算结构类型的长度(字节数) 例如:printf(“%d”,sizeof(struct Student)); 结果为18
11
8.1.2结构类型数据对象的定义及初始化
1.结构类型数据对象包括一般变量、指针、数组等,对 于成为结构变量、结构指针、结构数组等可以在说明语句中 用已定义的结构类型定义结构数据对象,也可以在定义结构 类型的同时定义结构数据对象。
7
2.结构类型的几点说明
(1)对于结构类型,系统不会为之分配内存。只有在定义 了结构变量后,系统才会分配内存单元给变量。
(2)结构是由若干个数据项组成,每个数据项都属于一种 已有定义的类型。每一个结构成员都不是独立的,它不是一 般的变量,而是跟结构联系在一起。
struct Student { int number
相关文档
最新文档