Что это за синтаксис: union {}? - PullRequest
0 голосов
/ 08 марта 2011
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?

Ответы [ 7 ]

1 голос
/ 08 марта 2011

Чтобы ответить на ваш вопрос (2), uif2 - это переменная , объявленная с типом, который является объединением.У союза нет названия, поэтому он называется «анонимным».Вы также можете сделать то же самое с struct:

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

Это объявляет переменную с именем foo, которая имеет тип данного struct.

1 голос
/ 08 марта 2011

Объединение позволяет вам обрабатывать блок памяти как разные переменные / типы переменных. Каждая переменная использует одну и ту же память, а общий объем памяти, используемый объединением, равен объему, используемому наибольшим членом.

Доступ к членам профсоюза осуществляется точно так же, как и к членам структуры. Но хотя структуры содержат элементы, каждый из которых содержит свою собственную память, члены в объединении используют одну и ту же память, поэтому один или несколько элементов могут быть недействительными.

Очевидно, вы не можете хранить несколько значений в объединении. Но для случаев, когда вам нужен один тип данных в одном случае и другой тип данных в другом случае, он предоставляет удобный способ хранения одного из этих различных типов данных.

1 голос
/ 08 марта 2011

Википедия , там написано:

В C и C ++ нетегированные объединения выражаются почти точно как структуры (структуры), за исключением того, что каждый элемент данных начинается в одном и том же местев памяти.

Я уверен, что документация для любых ваших инструментов расскажет вам все о профсоюзах, вы просто еще не нашли этот раздел.

0 голосов
/ 08 марта 2011

Использование union хорошо освещено.

Ответ на ваш вопрос о синтаксисе таков: union { unsigned int ui; float f; } - это тип, a union с членами ui и f. При инициализации значения идут после имени переменной, но это скорее определение, чем инициализация.

0 голосов
/ 08 марта 2011

union здесь означает, что unsigned int ui и float f совместно используют одно и то же пространство памяти.

0 голосов
/ 08 марта 2011
Объединение

похоже на структуру, но только с одним полем, к которому могут обращаться несколько имен. Так что в вашем случае uif2.ui и uif2.f оба имеют доступ к одной и той же ячейке памяти.

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

0 голосов
/ 08 марта 2011

Это ключевое слово C, например enum или struct.Объединение - это, по сути, способ наложения нескольких типов переменных в одном пространстве.Ищите это в любой приличной ссылке C.

...