【问题标题】:What is this syntax: union{}?这个语法是什么:union{}?
【发布时间】:2011-03-07 21:07:07
【问题描述】:
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 上找不到文档。

2) 为什么uif2 在函数联合的末尾?不应该是 union uif2 {} 之类的东西还是这是 C 的东西?

【问题讨论】:

  • 您搜索了什么?我找到了一个很好的参考搜索“union c”。这是一个完全标准的 C 语言特性。
  • 你的谷歌一定是坏了。我的也为您的搜索提供了一整页相关结果。
  • @Doug 您使用的是哪个搜索引擎?我建议找一个更好的!!
  • 任何好的 C 参考都将处理联合;通常在同一节中处理struct指的是什么'maunual'?
  • @Doug 在谷歌上搜索“c 编程联盟”会得到很多点击,但“C 语言联盟”会更好。几乎所有的 C 书籍、教程和“手册”都提到过联合。 uif2 的位置与它是(匿名)结构而不是联合时的位置没有什么不同。

标签: c unions


【解决方案1】:

Wikipedia,上面写着:

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

我相信你所拥有的任何工具的文档都会告诉你关于联合的所有信息,只是你还没有找到那个部分。

【讨论】:

    【解决方案2】:

    要回答您的问题 (2),uif2 是一个声明的变量,其类型恰好是联合。该工会没有名称,因此被称为“匿名”工会。你也可以对struct 做同样的事情:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        它是一个 C 关键字,例如 enum 或 struct。联合基本上是一种在同一空间中分层多种类型变量的方法。在任何体面的 C 参考文献中查找它。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            union 这里的意思是 unsigned int ui 和 float f 共享同一个内存空间。

            【讨论】:

              【解决方案7】:

              union的使用已经很好的覆盖了。

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

              【讨论】:

                猜你喜欢
                • 2012-01-29
                • 1970-01-01
                • 2021-04-21
                • 1970-01-01
                • 1970-01-01
                • 2010-12-13
                • 2012-07-25
                • 2011-11-13
                • 2014-03-31
                相关资源
                最近更新 更多