从定义上来看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 :