这是什么语法:union {}?

时间:2011-03-07 21:07:08

标签: c unions

void display_binary_float(unsigned int ui) {
  union {
    unsigned int ui;
    float f;
  } uif2;
  uif2.ui = ui;
  printf("binary: %08X float: %g\n", uif2.ui, uif2.f);
}

1)什么是工会?由于某种原因,没有手动输入。无法在谷歌上找到该文档。

2)为什么uif2在函数联合的末尾?它不应该像union uif2 {}或者这是C的东西吗?

7 个答案:

答案 0 :(得分:1)

Wikipedia,它说:

  

在C和C ++中,未标记的联合会是   表达几乎完全一样   结构(结构),除了每个   数据成员从同一个开始   在记忆中的位置。

我确信您所拥有的任何工具的文档都会告诉您有关工会的所有信息,但您还没有找到该部分。

答案 1 :(得分:1)

union允许您将内存块视为不同的变量/变量类型。每个变量共享相同的内存,并且联合使用的内存总量是最大成员使用的内存量。

访问联盟成员的方式与访问结构成员完全相同。但是,虽然结构包含每个都包含自己内存的成员,但联合中的成员共享相同的内存,因此一个或多个成员可能无效。

显然,您无法在联合中存储多个值。但是,对于在一种情况下需要一种数据类型而在另一种情况下需要另一种数据类型的情况,它提供了一种存储这些不同数据类型之一的便捷方式。

答案 2 :(得分:1)

要回答你的问题(2),uif2是一个变量,其声明的类型恰好是一个联合。工会没有名字,所以它被称为“匿名”联盟。您也可以使用struct执行相同操作:

struct {
    int a;
    char *b;
} foo;

这声明了一个名为foo变量,其类型为给定的struct

答案 3 :(得分:0)

它是一个C关键字,如枚举或结构。联合基本上是一种在同一空间中分层几种类型变量的方法。在任何体面的C参考中查找它。

答案 4 :(得分:0)

union就像一个结构,但只有一个字段可以被多个名称访问。因此,在您的情况下,uif2.uiuif2.f都会访问相同的内存位置。

http://msdn.microsoft.com/en-us/library/y9zewe0d(v=vs.80).aspx

答案 5 :(得分:0)

这里的

union表示unsigned int ui和float f共享相同的内存空间。

答案 6 :(得分:0)

union的使用已得到很好的覆盖。

您的语法问题的答案是union { unsigned int ui; float f; }是一种类型,union是成员uif。在初始化中,值确实在变量名之后,但这是一个定义而不是初始化。