2011-03-07 152 views
0
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)什么是工会?出于某种原因,没有手动输入。无法在Google上找到文档。这是什么语法:union {}?

2)为什么uif2在功能结合的结束?它不应该是像union uif2 {}或这是一个C的东西?

+3

你搜索了什么?我发现了一个很好的参考搜索“联盟c”。这是一个完全标准的C语言功能。 – 2011-03-07 21:09:07

+2

“c编程联盟” – Strawberry 2011-03-07 21:10:04

+1

您的谷歌必须被打破。我也为您的搜索提供了一整页的相关结果。 – 2011-03-07 21:11:19

回答

1

Wikipedia,它说:

在C和C++,无标记工会是 表达几乎完全一样 结构(结构),不同之处在于每个 数据成员开始于在存储器中的相同 位置。

我确定无论你有什么工具的文档都会告诉你关于工会的所有信息,但你还没有找到那个部分。

0

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

0

工会表示unsigned int的UI和漂浮F是共享相同的存储空间。

1

一个联盟可以让你把一个内存块不同的变量/变量类型。每个变量共享相同的内存,并且联合使用的内存总量是最大成员使用的数量。

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

很显然,你不能将多个值存储在一个工会。但是,对于一种情况下需要一种数据类型而另一种情况下需要另一种数据类型的情况,它提供了一种便捷的方式来存储其中一种不同的数据类型。

1

要回答你的问题(2),uif2变量声明与一个类型,碰巧是一个联盟。工会没有名字,所以称为“匿名”工会。你可以做同样的struct,太:

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

声明一个变量称为foo其中有一个类型的给定struct的。

0

采用union得到了很好的覆盖。

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