结构体类型的说明
在程序设计中,有时需要将不同类型的数据组合成一个有机的整体,以便于引用,在一个组合项中包含若干个类型不同(也可以相同)的数据项。c语言允许用户自己指定这样一种数据结构,称为“结构体”。结构体数据类型说明的一般形式为:
struct 结构体{
类型名 成员名1;
类型名 成员名2;
...
类型名 成员名n;
};
其中,struct是C语言中的保留字,它是结构体的标志,其后是结构体名,与变量名的取名规则相同,只要是合法的标识符即可。将同一对象中的不同数据项用一对大括号括起来,构成一个结构体成员的列表。
只有将struct与结构体名两者结合起来才能组成完整的结构体类型名。
关于结构体类型的几点说明。
(1)结构体成员的类型说明可以是任何一一种已定义过的数据类型,如int、float等基本数据类型,或者数组、指针及结构体等。
(2)结构体成员名可以和程序中已定义的变量名相同,也可以和不同的结构体类型中的成员名相同,彼此独立,互不影响。
如要表示教师的工号、姓名、性别等方面的信息,可构造如下结构体类型:
struct teacher{
long num;
char name[10];
char sex;
};
虽然两个不同的结构体类型struct student 和struct teacher外中有两个相同的成员名"num”和“name",但它们各自表示不同的信息,互不干扰。
又如
float num;
...
struct teacher{
long num;
char name[10];
char sex;
};
程序中的变量num与结构体struct teacher的成员num同名,彼此也互不影响。
(3)结构体数据类型成员列表{}之后的分号不能省略,不能省略,不能省略(重要的事说三遍)
定义结构体
变量般采用以下3种方法:
(1)先构造结构体类型,再定义结构体变量。如:
struct student{
long num;
char name[20];
int score[3];
};
struct student zhang,li;
/* 注意struct student是结构体类型名称*/
此程序段在构造了结构体类型struct student 之后,定义了该类型的2个结构体变量
(2)在构造结构体类型的同时,定义结构体变量。如:
struct student{
long num;
char name[20];
int score[3];
}zhang,li;
与第一种方式不同的是,将变量名直接写到结构体成员列表之后。
(3) 直接定义结构体变量。如:
struct {
long num;
char name[20];
int score[3];
}zhang,li;
因为此处不提供结构体名,所以如果程序中需要增加定义这种类型的结构体变量时,会比较麻烦,不方便表述,不建议使用这种定义结构体变量的方法。