代码之家  ›  专栏  ›  技术社区  ›  user2322888

并集在c中有什么用?[副本]

  •  1
  • user2322888  · 技术社区  · 11 年前

    我读过这个链接 what-is-the-point-behind-unions-in-c 但这个答案在我看来还不够。

    能给我更多关于工会使用的解释吗。 我不想要任何与内存相关的例子,比如,这最多需要4个字节(浮点占用4个字节)。

    union un{
        char ch;
        int iNum;
        float fNum;
    };
    

    所以我的问题是,

    联合到底有什么用?

    为什么我们需要这个?

    请帮帮我,这让我很困惑。 谢谢

    2 回复  |  直到 7 年前
        1
  •  3
  •   Community Egal    7 年前

    工会最常见的两种用途可能是:

        2
  •  1
  •   Some programmer dude    11 年前

    如果你有一个变量,它可以 任何一个 char , int , ...

    它通常用于包含实际并集类型的结构内部。通常被解析器用来从lexer返回一个令牌。类似于:

    struct token
    {
        int token_type;
    
        union
        {
            char  *s;  /* For string or keyword tokens */
            double f;  /* For floating point tokens */
            long   i;  /* For integer tokens */
        } token_value;
    };
    

    在上述结构中 token_value 成员取决于 token_type 成员


    还可以通过滥用联合中的数据来使用联合,即设置变量的一个成员并读取另一个成员。例如,这可以用于将浮点数转换为一系列字节。

    喜欢

    union data
    {
        char data[sizeof(double)];
        double value;
    };
    

    通过设置 value 成员,您可以读取 double 不带类型转换或指针算术的值。从技术上讲,这是由实现定义的行为,这意味着编译器可能不允许它。尽管它非常常用,所以所有当前的编译器都允许它。