在c中使用union有什么用?

时间:2013-09-18 14:54:02

标签: c unions

我读了这个链接what-is-the-point-behind-unions-in-c 但这个答案对我来说看起来不够。

我可以对工会的使用有更多解释吗? 我不想要任何与内存相关的示例,这将占用最多4个字节(浮点占用4个字节)。

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

所以我的问题是,

究竟使用了什么联盟?

为什么我们需要这个?

请帮助我,让我感到困惑。 感谢。

2 个答案:

答案 0 :(得分:3)

联盟最常见的两个用途可能是:

答案 1 :(得分:1)

如果您有一个 一个char一个int或 ...

它通常用在包含实际联合类型的结构中。解析器经常使用它从词法分析器返回一个令牌。类似的东西:

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值的单独字节,而无需进行类型转换或指针算法。这是技术上实现定义的行为,这意味着编译器可能不允许它。它是非常常用的,因此所有当前的编译器都允许它。