天天看点

struct vs union

从定义上来看struct和union定义的风格都差不多.但是union只能存储一个元素, 与struct 一样也是固定长度. 长度取决于union中定义的所有item中占用空间最大的那个.

为什么c这么多固定长度的东西呢, 原因是指针, 如果不定长, 存储这些类型的数组及数组型指针将使用起来非常困难. 因为需要定长, 地址运算的时候才比较方便. 如char a[10], a+1 地址加1字节. int a[10], a+1 则地址加4字节. 如果使用下面这个union 定义的 test a[10], a+1 地址加104字节. 如果不是定长, 那就不好搞了.

例如 : 

union用在什么场景呢? 例如要存储一个数量, 可能是个数(int), 也可能是重量(float), 也可能是体积(float).

如下面的例子 : 

使用union 一个需要注意的地方是, 没有地方跟踪你存储的到底是哪个类型, 如这个union里面包含了int, float, short. 怎么知道我存储的到底是什么类型呢, 如果存储的是int, 但是使用float去格式化输出肯定是有问题的, 结果不可预期.

使用enum 枚举来判别用的union里面的什么类型是一个比较好的方法.

其他 : 

1.  type name 与 struct name, enum name, union name

2. 赋值

struct : 

enum : 

与上面类似.

union :