C союз
Союз представляет собой особый тип данных, что позволяет вам в другое место в том же типе данных , хранящихся в памяти.Вы можете определить союз с несколькими членами, но в любое время может быть только один элемент со значением. Профсоюзы предоставляют возможность использовать ту же ячейку памяти эффективным способом.
Определение союза
Чтобы определить союз, вы должны использоватьсоюза заявления и определить структуру аналогичным образом.объединение оператор определяет новый тип данных, с множеством членов. Союз формат оператора выглядит следующим образом:
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
союз тег не является обязательным, каждое определение является членом стандартное определение переменной, такой как INT I, или поплавок п, или другие действительные определения переменных.До конца общего тела определенного конечного точкой с запятой, вы можете указать один или несколько союзных переменных, который является необязательным. Следующее определение общего типа тела под названием Data, есть три члена I, F и ул:
union Data { int i; float f; char str[20]; } data;
Теперь переменная типаданных может хранить целое число, вещественное или строку.Это означает, что переменная (то же самое место в памяти) может хранить множество различных типов данных. Вы можете использовать любые встроенные или определенные пользователем типы данных в едином теле по мере необходимости.
Союз должен быть достаточно памяти для хранения занимают самый большой член профсоюза. Например, в приведенном выше примере, данные будут занимать 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
член профсоюза доступа
Для того , чтобы получить доступ к странам общих членов, мы используемоператор доступа к члену (.).Оператор доступа Пользователь имеет период имена переменных и членов профсоюза нашего союза, чтобы получить доступ между ними. Вы можете использовать ключевое слово для определения переменных типаобъединение профсоюзов.Следующий пример демонстрирует использование союза:
#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членов профсоюза были повреждены, поскольку значения присваиваются переменным последней занимаемой ячейке памяти, которая является причиной членовулк неповрежденной продукции. Теперь давайте посмотрим на один и тот же экземпляр, на этот раз мы используем только одну переменную в то же время, он также демонстрирует основную цель использования союза:
#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
При этом все члены могут выводить нетронутыми, так как в то же время использует только один член.