引言
在C语言的使用过程中,很早就已经接触结构体、共用体,枚举类型等组合类型。但是由于本人在课堂上学习这一章学的不够仔细,而且使用的也不多,因此特意写下笔记,本次笔记以结构体为主。因为共用体,枚举类型个人觉得还是用的比较少,而枚举类型在C++方面可能会多些。
结构体
为了能够更加方面去描述生活中的许多数据而产生的一种组合类型。比如说:学生管理系统中的学生信息,书店中一本书的详细信息等等。可以使用结构体将信息中的所有数据统合在一起。
结构体的语法例子:
struct student
{
char name [32];
int age;
char gender;
double score;
};
- struct是结构体的关键字
- 创建的变量类型名字:student
- 结构体的定义部分:name、age、gender、score等,可以包含int、char、double、甚至结构体本身等类型都可以,唯独一样不可包括:函数,因为包含函数的就不是结构体了,而是C++中的类所特有的。
- 最后的分号(;)千万不能忘!
以类比普通变量的方式深入理解结构体
在创造结构体的时候,其实也有为大家考虑,结构体在使用的过程中,目标就是要让用户使用结构体像使用普通变量一样。
结构体的初始化:
以上介绍了三种结构体的初始化赋值方法。
第三种方法在C++中也能看到,但是在对数组赋值的时候,不能直接使用 等于(=)来给数组赋字符串。
但是,鉴于方法①与方法②的区别:
使用方法①的赋值初始化的方法的软件是不能兼容新版本的
也就是如果后面的有必要往结构体中添加新成员,那么方法①赋值的方法是不能兼容的。
因此,在这里推荐大家使用方法①,方法③两种制定成员赋值方法!
结构体指针
我们一般使用的结构体都比较大,因此,我们一般会使用指针来指向结构体。
这里使用一个函数来负责结构体中数据的输出:
结构体中的结构体
有的时候结构体的标签是可以省略的,但是也是有要求的,我们可以在结构体中再定义一个结构体,这时候里面的结构体的标签是可以省略的。
共用体
共用体与结构体类似,但是共用体与结构体的区别是:
- 结构体的成员是相互独立的,拥有自己的内存空间。
- 共用体的成员是共用同一块内存地址,内存空间有可能相互覆盖。
共用体只要对任一成员赋值,那么另一成员的数据可能会被覆盖。
例如:
代码运行结果:
从上图运行结果可以看到: - a的值已经不见了,b的值已经乱码了,只有c的值正确输出
- 并且共用体x,x.a,x.b,x.c四个的地址都是一样的
- 因此,共用体的取值,取决于占用空间最大的成员。
共用体的一般使用途径:
- 定义在结构体中的成员,如果该成员只允许选择其中一个值:例如:选课:只能在成员(语文,数学,英语)中选择一门,因此这里就可以使用共用体。
枚举类型
- 提高程序可读性
- 使整数的取值固定在一个范围之内