我知道 union 和结构之间的区别。 但是从设计和编码的角度来看,使用 union 而不是结构的各种用例是什么?一是空间优化。使用它们还有更多优势吗?
最佳答案
实际上只有两个主要用途。首先是创建一个受歧视的 union 。这可能就是您所想到的“空间优化”,但还有更多内容。您需要一些额外的数据来了解哪个 union 成员“还活着”(其中包含有效数据),因为编译器不会为您执行此操作。您通常会看到类似在结构内部具有 union 的代码,例如:
struct mixed {
enum { TYPE_INT, TYPE_FLOAT } type;
union {
int int_value;
float float_value;
} data;
};
当分配给 data.int_value 或 data.float_value 时,您还需要将类型成员设置为适当的枚举值。然后使用混合值的代码可以确定是读取 int_value 还是 float_value。
union 的第二个重要用途是提供一个 API,允许用户以多种方式访问相同的数据。这是非常有限的,因为它要求 union 中的所有类型以相同的方式放置在内存中。例如,int 和 float 是完全不同的,将 float 作为整数访问不会给您任何特别有意义的数据。
有关此用例的有用示例,请查看有多少网络 API 将为 IPv4 地址定义 union ,例如:
union ipv4addr {
unsigned address;
char octets[4];
};
大多数代码只想传递 32 位整数值,但有些代码想要读取各个八位字节(字节)。这一切都可以通过指针转换来实现,但它更容易一些, self 记录更多,因此以这种方式使用 union 会稍微安全一些。
但一般来说,如果您不确定是否需要 union ,您几乎可以肯定不需要 union 。
关于c - 何时使用 union ,何时使用结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7950689/