gpt4 book ai didi

c - 为什么我们需要 C 联盟?

转载 作者:太空狗 更新时间:2023-10-29 16:57:12 25 4
gpt4 key购买 nike

什么时候应该使用 union ?为什么我们需要它们?

最佳答案

union 通常用于在整数和 float 的二进制表示之间进行转换:

union
{
int i;
float f;
} u;

// Convert floating-point bits to integer:
u.f = 3.14159f;
printf("As integer: %08x\n", u.i);

尽管根据 C 标准,这在技术上是未定义的行为(您应该只阅读最近编写的字段),但它几乎在任何编译器中都会以明确定义的方式运行。

union 有时也用于在 C 中实现伪多态性,通过给结构一些标记来指示它包含什么类型的对象,然后将可能的类型 union 在一起:

enum Type { INTS, FLOATS, DOUBLE };
struct S
{
Type s_type;
union
{
int s_ints[2];
float s_floats[2];
double s_double;
};
};

void do_something(struct S *s)
{
switch(s->s_type)
{
case INTS: // do something with s->s_ints
break;

case FLOATS: // do something with s->s_floats
break;

case DOUBLE: // do something with s->s_double
break;
}
}

这使得 struct S 的大小仅为 12 个字节,而不是 28 个。

关于c - 为什么我们需要 C 联盟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com