Мне трудно понять, как использовать union
в C. Я читал здесь много постов на SO по этому вопросу. Но никто из них не объясняет, почему union
предпочтительнее, когда то же самое можно достичь с помощью структуры.
Цитата из K & R
В качестве примера можно найти
в менеджере таблицы символов компилятора,
Предположим, что константа может быть int,
float или символьный указатель.
значение конкретной константы должно быть
хранится в переменной правильного
типа, но это наиболее удобно для
управление таблицей, если значение занимает
такой же объем памяти и
хранится в том же месте, независимо от
его тип. Это цель
объединить одну переменную, которая может
законно удерживать любой из
несколько типов. Синтаксис основан на
структуры:
union u_tag {
int ival;
float fval;
char *sval;
} u;
Использование будет
if (utype == INT)
printf("%d\n", u.ival);
if (utype == FLOAT)
printf("%f\n", u.fval);
if (utype == STRING)
printf("%s\n", u.sval);
else
printf("bad type %d in utype\n", utype);
То же самое можно реализовать с помощью структуры. Что-то вроде
struct u_tag {
utype_t utype;
int ival;
float fval;
char *sval;
} u;
if (u.utype == INT)
printf("%d\n", u.ival);
if (u.utype == FLOAT)
printf("%f\n", u.fval);
if (u.utype == STRING)
printf("%s\n", u.sval);
else
printf("bad type %d in utype\n", utype);
Разве это не то же самое? Какое преимущество дает union
Есть мысли?