Определение размера памяти, выделяемой под объединение
В отличие от структуры, объединение может в любой момент времени содержать только один из своих элементов. Объединение позволяет использовать одну область памяти для хранения различных видов данных в разные моменты времени. Фактически, объединение – это структура, в которой все поля начинаются со смещением 0, таким образом, поля накладываются друг на друга.
Например:
struct s_tag { char c; int i; double d; } s_item; | union u_tag { char c; int i; double d; } u_item; |
Все поля объединения располагаются по одному и тому же адресу. Размер объединения равен наибольшей из длин его полей. То есть память, которая соответствует переменной типа объединения, определяется величиной, необходимой для размещения наиболее длинного элемента объединения. Когда используется элемент меньшей длины, то переменная типа объединения может содержать неиспользуемую память. Объединения применяются для экономии памяти, если известно, что другие поля не потребуются.
Пример 1.
#include <stdio.h>
void main() {
struct s_tag {
char c;
int i;
double d;
} s_item;
union u_tag {
char c;
int i;
double d;
} u_item;
printf("Размер структуры = %d\n", sizeof(s_item));
printf("Размер объединения = %d\n", sizeof(u_item));
}
Результат выполнения программы:
Размер структуры = 12
Размер объединения = 8
Например:union {
char fio[30];
char adres[80];
int vozrast;
int telefon;
} inform;
union {
int ax;
char al[2];
} ua;
При использовании объекта inform типа union можно обрабатывать только тот элемент, который получил значение, т.е. после присвоения значения элементу inform.fio, не имеет смысла обращаться к другим элементам. Объединение ua позволяет получить отдельный доступ к младшему ua.al[0] и к старшему ua.al[1] байтам двухбайтного числа ua.ax .
Дата добавления: 2015-02-16; просмотров: 564;