Я читал, что в Союзах члены данных занимают один и тот же блок памяти. Итак, я попытался прочитать ASCII-коды английского алфавита, используя эту реализацию.Хранение союза в памяти
union {
int i;
char a,b;
}eps;
eps.i=65;
cout<<eps.a<<eps.b;
Я получил правильный выход (A
) для 65, но, как и a
b
, кажется, занимают такое же место в памяти.
Q. Но целое число, равное 2 байтам, не должно a
заняло первые 8 бит и b
других 8?
Кроме того, повторяя вышеизложенное с несколькими целыми числами внутри объединения, они, похоже, имеют одинаковое значение.
Q. Значит ли это, что каждая переменная данного типа данных действует как ссылку для любой другой переменной для одного и того же типа данных? (Учитывая простое добавление к переменным int i,j,k,l.....
)
Q. Можно ли использовать только одну (отличную) переменную данного типа данных в объединении, поскольку все остальные указывают на одно и то же местоположение?
EDIT
Я хотел бы отметить, что при добавлении в любых более переменных внутри союза, это просто означает, добавив их как int i,j,k...
не используя оборачивать их внутри struct
или каким-либо другим способом.
Как уточнил Baum mit в чате (и комментарии), Here's the discussion для других пользователей/будущих пользователей.
Используйте анонимную структуру для обертывания a и b. – didierc
'char a, b' является просто сокращением для' char a; char b; ' – Dave
Я знаю, что @Dave –