第9章 结构体与共用体
C语言的数据类型丰富,除了提供基本数据类型(如整形、实型、字符型等数据类型)外,还提供了一些构造类型。构造类型包括前面介绍的数组类型,以及本章将要介绍的结构体类型和共用体类型。另外,有一种基本类型--枚举类型,因使用形式类似于构造类型,也将在本章中予以介绍。
虽然C语言的数据类型已经相当丰富,但有时并不能满足编程的需要,所以C语言还提供了用户自定义类型,从而使数据类型更加丰富多彩。本章也将对用户自定义类型进行介绍。
9.1 结构体
数组只能存储一种数据类型,如果要处理的数据中包含多种数据类型,数组就“无能为力”了,从而引出了一种新的数据类型——结构体(struct)。
本节从结构体的概念入手,详细介绍结构体变量的定义、引用、初始化、结构体数组、结构体型指针、结构体和函数,以及位域。
9.1.1 什么是结构体
现实生活中,一个事物往往具有多个属性。例如,一辆汽车的基本信息包括汽车品牌(字符型),车型(字符型),马力(整型)等。一个班级中学生基本信息包括学号(整型)、姓名(字符型)、性别(字符型)、年龄(整型)、班级(字符型)、成绩(整型或者浮点型)等。显然不能用数组来表示这些数据,因为数组的元素类型必须是一致的。在此情况下,可以使用C语言提供的结构体数据类型,使得管理数据更加方便,而且还便于数据的封装与隐藏。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,简称结构。在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体中不能包含函数类型。
结构体定义的一般形式为:
struct 结构体类型名
{
数据类型 成员1;
数据类型 成员2;
…
数据类型 成员N;
};
其中,struct为关键字,结构体类型名是用户定义的合法C语言标识符,{ }中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型(除函数类型)。
9.1.2 结构体实例——《水浒传》中的一百单八将
现实生活中可以用结构体表示的事物比比皆是,例如,我国四大名著之一——《水浒传》,其中包括性格各异的108个人物,如果现在要使用一种C语言的数据类型表示这些人物,结构体无疑是最佳选择。下面用一个名为hero的结构体来对其进行表示:
struct hero
{
int number; //排名
char sex; //性别
char star_name[20]; //星名
char name[20]; //名称
char nickname[20]; //绰号
char position[20]; //职业
char weapon[20]; //使用武器
};
这个结构体如图9.1所示(括号中表示此结构体类型变量可能的取值):
图9.1 结构体hero
最新作品《C语言参悟之旅》全新上市,敬请关注!
官方网站:http://www.tqbooks.net/product/gb/product_detail.asp?catalogid=10&productid=1474
China-pub有售:http://www.china-pub.com/49980