Как вывести A.K. с помощью кода с union?
Дали код с заданием дополнить его, чтобы cout выводило A.K.. Вот сам код:
#include <iostream>
using namespace std;
union Data {
int i;
char c;
};
int main()
{
Data myBite;
myBite.i = 65;
cout << myBite.c;
return 0;
}
Не могу понять, что мне надо сделать. Вроде как char может содержать только 1 символ, однако, массив char[] может содержать несколько. Только вот как мне сделать массив из этого?
Я вообще впервые вижу какой-то union, поэтому даже не предполагаю, что с ним делать.
Обновлено:
Друзья скинули ещё вариант реализации такого.
#include <iostream>
using namespace std;
int main()
{
cout << "START\n";
union Data
{
int i;
char c;
};
Data myByte;
myByte.i = 65;
cout << myByte.c;
myByte.i = 46;
cout << myByte.c;
myByte.i = 75;
cout << myByte.c;
myByte.i = 46;
cout << myByte.c << endl;
}
Ответы (1 шт):
Data myBite = {0};
myBite.c = 'k';
myBite.i <<= 8;
myBite.c = 'A';
char* p = &d.c;
cout << *p++ << *p; //вывод: AK
Дело в том, что myBite.c находится по тому же адресу, что и myBite.i, символ занимает 1 байт, а второе(int) - 4 байта. Остается лишь инициализировать эти байты правильно. С помощью битового свига мы этого можем добиться, а адрес на символ будет указателем на начало этого "4_х байтного массива ". Более того, можно получить и 4 символа:
Data d = {0};
d.i = 'A';
d.i |= '.'<< 8;
d.i |= 'K'<< 16;
d.i |= '.' << 24;
char* p = &d.c;
for (int i = 0; i < 4; ++i)
cout << *p++ ; //вывод: A.K.