我们 都知 道 C 语言 中变量 的类 型决 定了 变 量存 储占 用的 空间 。当我
们要 使用 一个 变量 保 存年 龄时 可以 将其 声 明为 int 类型 ,当我 们要 使用
一个 变量 保存 某一 科 目的 考试 成绩 时可 以将其 声明 为 float 。
那么, 当我 们要 做一 个学 生信 息管 理系 统 时,需 要保 存学 生的 姓名、
学号 、年 龄等 信息 , 该怎 么做 呢?
如当 要保 存三 个学 生 的信 息时 ,
方法 一是 :
char *name1,*name2,*name3; // 三个学生的姓名
int num1,num2,num3; // 三个学生的学号
int age1,age2,age3; // 三个学生的年龄
方法 二是 :
// 创建结构体模板
struct student
{
char *name; // 学生名字
int num; // 学生学号
int age; // 学生年龄
};
// 使用该结构体模板创建三个变量 stu1, stu2, stu3
struct student stu1, stu2, stu3;
显然 ,方 法二 跟更 清 晰, 因为 它把 name、 num、age 都集 成 在一 个
模板 ,要 用的 时候 只 要套 用模 板进 行创 建 即可 。这 就是 结 构 体 。
什 么 是 结 构 体
结 构 体 (struct) 是 由 一 系 列 具 有 相 同 类 型 或 不 同 类 型 的 数 据 项 构
成的 数据 集合 ,这些 数据 项称 为 结 构 体 的 成 员 。如 上面 的 student 结 构
体包 含三 个成 员, 分 别是 name、 num、age 。
结构 体是 C 语 言中 的一种 构 造 类 型 。 C 语 言的 数据 类型 如下 图 :
结 构 体 变 量 的 定 义 方 法 1 方法一
// 创建结构体模板 struct student
struct student
{
char *name; // 学生名字
int num; // 学生学号
int age; // 学生年龄
};
// 使用该结构体模板创建三个变量 stu1, stu2, stu3
struct student stu1, stu2, stu3;
此处 ,student 是 结构 体名 ,该 名字 是由 任 意定 义的 ,但是尽 量 起个 有意
义的 名称。其相 当于 一个 模板,可以 使用 这个 模板 去定 义变 量 stu1 ,stu2 ,
stu3 。定义 的时 候不 要忘 了 struct 。
2 方法二
// 定义三个结构体变量 stu1, stu2, stu3
struct
{
char *name; // 学生名字
int num; // 学生学号
int age; // 学生年龄
}stu1, stu2, stu3;
相对 于方 法一 ,此 处 省略 了结 构体 名。虽 然更 简洁 了,但是 因 为没
有了 名字 ,后 面就 不 能用 该结 构定 义新 的 变量 。
3 方法三
// 给结构体模板 struct student重新命名为 student
typedef struct student
{
char *name; // 学生名字
int num; // 学生学号
int age; // 学生年龄
}student;
// 使用 student 创建三个结构体变量 stu1, stu2, stu3
student stu1, stu2, stu3;
此处 使 用 typedef 为结 构体 模 板 struct