Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

С - Союзы

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

Определение союза

Чтобы определить союз, вы должны использовать union точно так же, как вы это делали при определении структуры. Оператор union определяет новый тип данных с более чем одним элементом для вашей программы. Формат оператора объединения следующий:

union [union tag] {
   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];  

тег объединения является необязательным, и каждое определение члена является обычным определением переменной, например int i; или плавать f; или любое другое допустимое определение переменной. В конце определения объединения, перед последней точкой с запятой, вы можете указать одну или несколько переменных объединения, но это необязательно. Вот как вы могли бы определить тип объединения с именем Data, содержащий три члена i, f и str —

union Data {
   int i;
   float f;
   char str[20];
} data;  

Теперь переменная Data type может хранить целое число, число с плавающей запятой или строку символов. Это означает, что одна переменная, то есть одна и та же ячейка памяти, может использоваться для хранения нескольких типов данных. Вы можете использовать любые встроенные или пользовательские типы данных внутри объединения в зависимости от ваших требований.

Память, занимаемая объединением, будет достаточно большой, чтобы вместить самый большой элемент объединения. Например, в приведенном выше примере тип данных будет занимать 20 байт памяти, потому что это максимальное пространство, которое может быть занято строкой символов. В следующем примере отображается общий объем памяти, занимаемый вышеуказанным объединением —

Живая демонстрация
#include <stdio.h>
#include <string.h>
 
union Data {
   int i;
   float f;
   char str[20];
};
 
int main( ) {

   union Data data;        

   printf( "Memory size occupied by data : %d\n", sizeof(data));

   return 0;
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

Memory size occupied by data : 20

Доступ к членам союза

Чтобы получить доступ к любому члену объединения, мы используем оператор доступа к члену (.) . Оператор доступа к члену закодирован как точка между именем переменной объединения и членом объединения, к которому мы хотим получить доступ. Вы бы использовали ключевое слово союз для определения переменных типа union. В следующем примере показано, как использовать объединения в программе —

Живая демонстрация
#include <stdio.h>
#include <string.h>
 
union Data {
   int i;
   float f;
   char str[20];
};
 
int main( ) {

   union Data data;        

   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");

   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);

   return 0;
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

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

Теперь давайте еще раз рассмотрим тот же пример, где мы будем использовать одну переменную за раз, что является основной целью объединения —

Живая демонстрация
#include <stdio.h>
#include <string.h>
 
union Data {
   int i;
   float f;
   char str[20];
};
 
int main( ) {

   union Data data;        

   data.i = 10;
   printf( "data.i : %d\n", data.i);
   
   data.f = 220.5;
   printf( "data.f : %f\n", data.f);
   
   strcpy( data.str, "C Programming");
   printf( "data.str : %s\n", data.str);

   return 0;
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

data.i : 10
data.f : 220.500000
data.str : C Programming

Здесь все элементы печатаются очень хорошо, потому что каждый элемент используется одновременно.


Язык C

  1. Микропроцессоры
  2. Данные операционного усилителя
  3. Типы данных С++
  4. C Типы данных
  5. С союзы
  6. Типы данных Python
  7. C — Типы данных
  8. Структуры данных С++
  9. Абстракция данных в C++
  10. Инкапсуляция данных в C++