结构体定义
对于一组相同类型的数据,比如一个班上所有人的考试成绩,可以用数组来存放。但是,对于一组不同类型的数据,比如一个班上的学生的年龄,姓名,性别等,由于数据类型不一样,就不能仅仅通过数组来存放了。
于是,在C语言里,提供了一个叫struct(结构体)这样的一个新的数据类型。“结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。
成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:
类型说明符 成员名;
成员名的命名应符合标识符的书写规定。例如:
struct student
{
int id;
int age;
char name[20];
char sex;
float score;
} ;
该结构定义了一个有关学生信息的一个结构体。其中学号为整型的id,年龄为整型的age,名字为char类型的字符数组,性别为一个char类型的字符sex,成绩则为一个float类型的score。他们共同组成了一个学生的信息。
10.1结构体定义
定义一个结构的一般形式为如下几种:
1,struct 结构名
{
成员表列
};
struct 结构名 变量名;
比如:
struct S
{
int value;
char ch;
};
struct S s1;//此处利用结构体类型struct S定义了一个结构体的变量s1
2,struct 结构名
{
成员表列
}变量名1,变量名2;
比如:
struct S
{
int value;
char ch;
}s1,s2;//此处在定义结构体类型的时候,同时定义了2个结构体变量s1,s2
3,struct
{
成员表列
}变量名1,变量名2;
比如:
struct
{
int value;
char ch;
}s1,s2;//此处定义了2个结构体类型变量s1和s2,但结构体的类型是匿名的,因此这个结构体只能用来定义这2个结构体变量
4,typedef struct _结构名
{
成员表列
}结构名,*P结构名;
结构名 变量名;
比如:
typedef struct _S
{
int value;
char ch;
}S,*PS;
S s1;//这里定义了一个类型为S的结构体变量s1
PS s2;//这里定义了一个类型为PS的结构体指针s2,等价于:S *s2;即PS与S*是等价的。
第4种定义方法是结构体定义的主流定义方法。目前大多数程序库中对结构体的定义方法都是采用第4种定义的方法。