-------android培训、java培训、iOS培训、.Net培训、期待与您交流! ----------
在实际问题中,一组数据往往具有不同的数据类型;例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型。因为数据类型不同,显然不能用一个数组来存放。
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。定义结构体的一般形式为:
struct 结构体名{
成员列表
};
每个成员都是结构体的组成部分,有名字,也有数据类型,形式为:
};
类型说明符 成员名;
例如用结构体来表示学生信息:
- struct stu{
- char *name; //姓名
- int num; //学号
- char sex; //性别
- float score; //成绩
- };
相应的,int、char、float 这些数据类型被称为基本数据类型。上面的代码定义了一个结构体,名字为stu。stu由4个成员组成,分别为 name、num、sex、score。
注意大括号后面的分号
;
不能少。
结构体变量
结构体也是一种数据类型,可以用来说明变量。例如:struct stu stu1, stu2;定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 4 个成员组成。注意关键字
struct
不能少。
stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。
结构体的各个成员在内存中是连续存储的。stu1、stu2 的内存如下图所示:

- struct stu{
- char *name; //姓名
- int num; //学号
- char sex; //性别
- float score; //成绩
- } stu1, stu2;
如果只需要 stu1、stu2 两个变量,也可以不写结构体名字:
- struct{ //没有写 stu
- char *name; //姓名
- int num; //学号
- char sex; //性别
- float score; //成绩
- } stu1, stu2;
也可以用宏定义使一个符号常量来表示一个结构类型,例如:
- #define STU struct stu
- STU{
- char *name; //姓名
- int num; //学号
- char sex; //性别
- float score; //成绩
- };
- STU stu1, stu2;
成员的获取和赋值
在C语言中,使用点号.
来获取结构体中的一个成员,一般格式为:
结构变量名.成员名
例如:
- stu1.name; //第一个学生的姓名
- stu2.score; //第二个学生的成绩
- stu1.name = "Tom";
- stu2.score = 90.5;
- struct stu{
- char *name; //姓名
- int num; //学号
- char sex; //性别
- float score; //成绩
- } stu1, stu2 = { "Tom", 10, 'M', 90 };
stu2 = { "Tom", 10, 'M', 90 };
一个完整的示例:
- #include <stdio.h>
- #define STU struct stu
- int main(){
- STU{
- char *name; //姓名
- int num; //学号
- char sex; //性别
- float score; //成绩
- };
- STU stu1;
- stu1.name = "James Bond";
- stu1.num = 1;
- stu1.sex = 'M'; //用M表示男性,W表示女性
- stu1.score = 99;
- printf("Hello everyone! My name is %s, a naughty boy, but with good scores(%.2f) and top No.(%d)!", stu1.name, stu1.score, stu1.num);
- return 0;
- }