c++ - C语言中的union共用体有什么用?
世界只因有你
世界只因有你 2017-06-12 09:24:44
0
5
1047

RT,这种结构最后一次赋值会把之前的赋值覆盖掉,所以很好奇请问一下这种东西一般应用在什么场景呢?

世界只因有你
世界只因有你

全部回复(5)
漂亮男人

省内存,方便取高低字节

某草草

最初目的就是为了节省内存,你想当初C语言在上个世纪八十年代才开始大规模使用,那时的内存很宝贵的。

左手右手慢动作

可以提供对同一段数据不同的访问接口。。。
举个例子,曾经做嵌入式的时候,可以这样写:

// 没有字节对齐,或者字节对齐为1,int 占4字节
typedef union {
    unsigined int num;
    struct {
        unsigned char byte0;
        unsigned char byte1;
        unsigned char byte2;
        unsigned char byte3;
    } bytes;
} Demo;

不过这样写也不太简洁,而且这段代码在 PC 里面和直接通过位移取每一个字节效率是一样的。只是举个例子,不要太纠结。

女神的闺蜜爱上我

一般用来判断大小端

给我你的怀抱

在嵌入式开发中用的比较多,我这里给个例子,和上面 @zonxin 的差不多

typedef struct __regular_descriptor_4_high {
    union {
        U32 value;
        struct {
            U32 raid_id0    : 4;
            U32 raid_cmd0   : 4;
            U32 raid_id1    : 4;
            U32 raid_cmd1   : 4;
            U32 raid_id2    : 4;
            U32 raid_cmd2   : 4;
            U32 raid_id3    : 4;
            U32 raid_cmd3   : 4;
        } reg_des_bit;   
    } u; 
} reg_des_4_high;

要读取整个寄存器可以读value,要写不同的bit-filed就用reg_des_bit来写。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板