c++ - Wozu dient Union in der C-Sprache?
世界只因有你
世界只因有你 2017-06-12 09:24:44
0
5
1043

RT, die letzte Zuweisung dieser Struktur überschreibt die vorherige Zuweisung, daher bin ich gespannt, in welchen Szenarien so etwas im Allgemeinen verwendet wird?

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

Antworte allen(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来写。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage