内容正文:
9.3 结构体
9.3.1 定义结构体和结构体变量
9.3.2 结构体变量初始化
9.3.3 结构体变量成员的访问
在通讯录中,常常需要记录一个人的姓名、年龄、地址以及电话号码等资料。很明显,这些数据资料应该分别使用不同类型的数据进行表达,这时可以使用结构体这种新的数据类型来处理这些数据。
9.3.1 定义结构体和结构体变量
结构体与数组相似,也是一种复杂数据类型。不过与数组不同的是,数组中每个元素的数据类型是相同的,而结构体中的元素的数据类型可以不同,它可以根据用户的需要对每个元素的数据类型进行定义。这种由不同类型的数据构成的复杂数据类型,称为结构体。
1.结构体的定义
在正式使用结构体之前,应该首先对结构体的构成进行描述,这称为结构体的定义。结构体的定义用于说明:
· 结构体中包含哪些数据元素;
· 每个数据元素是什么数据类型。
在结构体中,每1个数据元素称为结构体的1个数据成员。
(1)结构体的定义格式
在结构体的定义中包含了各个数据成员的基本信息,它的一般形式为
struct 结构体名
{
数据类型1 成员名1;
数据类型2 成员名2;
……
数据类型n成员名n;
};
(2)用法说明
关于结构体的定义做如下说明。
· “struct”为结构体类型定义的关键字,结构体名是此结构体的类型标识。
· 结构体名(例如data)也是一种标识符,因此其定义规则和变量名、数组名以及函数名相同。
· 结构体中的各成员必须用大括号括起来组成结构体的成员列表,结构体内的成员可以是一般数据类型(字符型、实型、整型等),也可以是复杂的数据类型(如数组等),还可以是结构体类型。
· 结构名后的大括号中包含的内容是结构体中包含的成员,一经定义后,结构体的构成就被固定下来了。
· 注意大括号后的分号不能遗漏。
· 结构体是一种特殊的数据类型,一旦用户定义一个结构名后,编译系统会将其同int,double,char等基本数据类型同等对待。
· 结构体仅仅描述一种数据组织格式,只是说明了这种结构所使用的“内存模式”,因此结构是抽象的。通过结构定义,主要说明在使用这种复杂数据类型时,这种数据占据内存的具体情况,取决于结构体包含的成员的数量以及对应的数据类型。
2.定义结构体变量
结构体的定义只是创建了一种新的数据类型(一种复杂数据类型),这种数据类型的地位与int,double等简单数据类型相同。
就像在使用整型变量时需要使用:
int a;
定义一个具体的整型变量一样,也需要定义一个具体的结构体变量。
结构体变量是具体的,其中包含的每个成员都会被分配相应长度的存储空间,这些成员可以通过一定方法进行读写等操作。
(1)结构体变量的定义格式
结构体变量的定义格式为
struct 结构名 结构体变量名[={初值表}];
例如:
struct data data1,data2;
其中,struct为结构体的标识符,data为结构体名称,data1,data2为两个具体的结构体变量。
定义结构体变量后,该变量包含的所有成员就会被分配相应大小的存储空间。
(2)在定义结构体的同时也可以定义结构体变量
例如:
struct data//定义结构体data
{
char name[20];//定义结构体成员变量
short age;
char address[80];
float wage;
}data1,data2;//定义结构体变量data1,data2
在定义结构体的同时定义了两个结构体变量data1和data2。
(3)在定义结构体时可以省略结构名
例如:
Struct//定义省略结构名的结构体
{
char name[20]; //定义结构体成员变量
short age;
char address[80];
float wage;
}wang,li,zhang;//定义结构体变量wang,li,zhang
这种定义方法简单明了,但是由于省略了结构名,在定义语句之外无法定义新的结构体变量。
(4)结构数组
仿照基本数据类型的用法,在定义结构体后,具有相同数据类型的结构体变量也可以组成结构数组。
结构数组的格式为
struct 结构名 结构数组名[元素个数];
例如:
struct data man[3];
其中man[3]由man[0],man[1]和man[2]组成,每个元素都是以data为结构类型的结构体变量。
9.3.2 结构体变量初始化
初始化就是给结构体变量的每个成员赋初值。
结构体变量可以在定义的同时进行初始化,即使用一对大括号包围的初值表对结构体变量的每个成员赋值,其用法和数组类似。
例如:
struct data wang={"wangwei",20,"建设路",2234.5};
初始化