C里面比较典型的两种数据结构就是struct和union,虽然学习的时候不会经常用,但是了解它们的基本原理对我们的帮助还是很大的
struct
在C语言中,struct其实指的就是structure,也就是结构体。它的出现就是为了便于去描述一个整体,比如一本书,当我们想要囊括它的所有性质(书名,目录,页数,标题等)的时候,最好的做法就是希望能把这些数据组合起来,这就是结构体。
定义一个结构体:
访问结构体内的成员
union
union,也就是联合,它与结构体最大的不同就是它是共用存储空间的,定义和访问基本与结构体一样,这里就不做过多的赘述,主要我们来对比下两者的区别于不同。
difference between struct and union
图中的代码展示的是一个struct和union,其中包括了定义、赋值和输出;我们通过分析结果来获取我们想要对比的内容:
第一点:struct在计算占据内存空间的时候是以4对齐的,因此5+10+4对应的是20字节,而union是共用内存空间,因此选取最大的10对应的是12字节。第二点:赋值的时候,struct是对每一个成员赋值并且互相不影响,输出的时候,值也不会被影响到,而union输出的结果明显不正确,说明每次访问的内存空间都是一样的,后一次的赋值会覆盖前一次的结果。
Bit Fields
typedef
typedef主要是用来给一些数据类型其别名的,比如我们如果要定义一个结构体,一般都需要写如下的代码:struct struct_name xxxx, 显得很长,很麻烦,但是用typedef,比如:typedef struct struct_name FUNC,
然后,FUNC xxxx即可,这样定义多个的时候可以节省很多时间。
另外要说明一点,就是#define与typedef的区别,这两者之间,#define可以定义常量,而typedef必须定义类型,此外,typedef是在编译阶段去处理,而#define则是在预处理阶段处理的。