1

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

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

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

所以我的问题是,

union 到底有什么用?

为什么我们需要这个?

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

4

2 回答 2

3

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

于 2013-09-18T15:01:44.397 回答
1

如果您有一个可以aa或...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值的单独字节,而无需类型转换或指针运算。这是技术上实现定义的行为,这意味着编译器可能不允许这样做。虽然它非常常用,所以所有当前的编译器都允许它。

于 2013-09-18T14:59:49.673 回答