Объединения (смеси)
Главной особенностью объединения является то, что для каждого из объявленных элементов этого объединения выделяется одна и та же область памяти, т.е. они перекрываются. Хотя доступ к этой области памяти возможен с использованием любого из элементов, элемент для этой цели должен выбираться так, чтобы полученный результат не был бессмысленным.
Объединение применяется для следующих целей:
1. использования одной и той же области памяти для размещения переменных различного типа;
2. интерпретации представления переменной одного типа, как несколько переменных другого типа.
Объединение по описанию подобно структуре. Тип объединения может задаваться в следующем виде:
union { описание элемента 1;
...
описание элемента n; };
Доступ к элементам объединения осуществляется тем же способом, что и к структурам.
Память, которая соответствует переменной типа объединения, определяется величиной, необходимой для размещения наиболее длинного элемента объединения. Когда используется элемент меньшей длины, то переменная типа объединения может содержать неиспользуемую память. Все элементы объединения хранятся в одной и той же области памяти, начиная с одного адреса.
Второй вариант можно проиллюстрировать следующим образом. Например, требуется передать число плавающего типа. Однако последовательный порт может передавать или принимать только однобайтовые числа. В этом случае можно воспользоваться объединением:
union {float Koeff; //Интерпретация объединения как переменной плавающего типа
char byte[4];//Интерпретация объединения как массива
} bufer; //Объявление переменной bufer
Объединение bufer позволяет последовательному порту получить отдельный доступ ко всем байтам числа bufer.Koeff начиная от младшего байта bufer.byte[0], и заканчивая старшим байтом bufer.byte[3]. В программе затем можно пользоваться загруженным числом как числом с плавающей запятой.
Дата добавления: 2015-10-09; просмотров: 644;