1.1、结构体类型的定义
结构体是由一批数据组合而成的一种新的数据类型。组成结构型数据的每个数据称为结构型数据的“成员”。这些成员可以具有不同的 数 据类型。由于结构体数据的成员类型不同,因此结构体要由用户在程序中自己定义。
结构体类型定义的一般形式为:
- struct 结构体名
- {
- 数据类型1 成员名1;
- 数据类型2 成员名2;
- 数据类型3 成员名3;
- …
- 数据类型n 成员名n;
- }; //分号是必不可少的,它是结构体的一部分。
复制代码对于结构体类型的定义需要做以下几点说明:
(1)结构体名是用户用于标识结构体成选取的标识符,必须符号标识符的命名规则。
(2)数据类型1…数据类型n,可以是任何一种数据类型,可以是基本类型说明符,也可以构造体类型说明符,也可是已经定义过的结构体名。
(3)成员名1…成员名n,是用户自己定义的标识符,用来标识该结构体所包含的成员名称。相当于变量定义中的变量名。
(3)结构体定义在括号后的分号是不可少的。
(4)如果成员名的前面有“*”,表示该成员是指针型;如果成员名后面有“[长度]”,表示该成员是数组型。
struct employee
{
int number;
char *name; //定义成员名为name,数据类型为指
char sex;
float wage; //定义成员名为wage
};
(5)当某个结构体成员的数据类型是另一个结构体时,称为“嵌套结构体”。此时,作为成员数据类型的结构体的定义必须出现在本结构体定义之前。
(6)当结构体成员的数据类型选取了自身的结构体时,成员只能是本结构体的指针变量或者是结构体指针型数组,但不能是结构体变量或结构数组。
(7)结构体是一种数据类型,在定义结构体进,其成员并不分配内存。只有用“struct 结构体名”来定义该结构型的变量、数组以及指针变量时,以会分配内存。
1.2、结构体变量的定义和引用
结构体类型本身是一个数据类型,具体的数据,也不占用系统内存空间。当程序中已经定义了结构体时,就可以使用“struct 结构体名”作为数据类型符来定义处理这种结构体数据的变量、数组及指针等。
1.2.1、结构体变量的定义和初始化
1.先定义结构体,再定义结构体变量
这种方式的定义语句格式如下:
struct 结构体名{
数据类型1 成员名1;
数据类型2 成员名2;
…
数据类型n 成员名n;
};
…
struct 结构体名 结构体变量名=初值;
2.在定义结构体的同时定义变量
这种方式的定义语句格式如下:
struct 结构体名
{
数据类型1 成员名1;
数据类型2 成员名2;
…
数据类型n 成员名n;
}结构体变量名=初值;
3.直接定义结构体类型变量
直接定义结构体类型变量是指在定义结构体时定义变量,并将结构体名省略。这种方式的定义语句格式如下:
struct
{
int num;
char name[20];
char sex;
int age;
float wage;
}emp1={100001,”mayun”,’m’,40,100000000}, /*定义结构体变量并赋值*/
emp2={100002,”yangzhiyuan”,’m,45,200000000};
1.2.2、结构体变量的引用
在程序中使用结构体变量时,不能将其作为一个整体来使用。结构体中的成员可以当成一般的变量来使用,结构体变量的赋值、输入、输出、运算等都是通过结构体中的成员来实现的。结构体变量成员的引用方法如下:
结构体变量名.成员名
printf(“%d,%s”,emp1);
printf(“%d,%s”,emp1.num,emp1.name);
- <font face="宋体" size="3">struct BIRTH /*定义员工出生日期的结构体*/
- {
- int year; /*定义年*/
- int month; /*定义月*/
- int day; /*定义日*/
- };
- struct employee
- {
- int num; /*定义员工工号*/
- char name[10]; /*定义员工姓名*/
- struct BIRTH birthday; /*该成员的数据类型是生日结构体*/
- }emp1={100001,”mayun”,{1964,9,10}},emp2;</font>
复制代码如果是嵌套的结构型,其成员的引用方法如下:
外层结构体变量名.外层成员名.内层成员名
上例中,如果要引用员工的出生日期,表示如下:
emp1.birthday.year
emp1.birthday.month
emp1.birthday.day
对于结构体变量的引用进行以说明:
(1)结构体变量的成员可以是任何类型,对该成员的操作与相同类型的普通变量并无区别,但需要在成员名前缀以结构体变量名。
(2)结构成员变量的使用与普通变量没有区别,因此可根据类型进行相应的运算。
(3)如果成员本身又是一个结构体时,必须逐级找到最低一级的成员才能使用。
(4)可以使用成员的数据,也可以使用成员的地址。结构体变量的地址是可以使用的,结构体变量的使用主要要为结构体变量成员的引用、结构型变量成员地址的引用及结构型变量地址的引用。
(5)允许将一个结构变量直接赋值给别一个具有相同结构的结构体变量。