#include <iostream>
union TestUnion
{
public:
int X;
int Y;
void Func()
{
}
};
int main()
{
TestUnion NewUnion;
NewUnion.X = 10;
NewUnion.Y = 20;
std::cout << NewUnion.X;
std::cout << NewUnion.Y;
}
위의 코드에서 TestUnion이 class 였다면 출력값은 10 20 이렇게 출력될 것이다.
그치만 위와같이 union으로 한다면 20 20 이렇게 출력된다.
같은 이치로 class라고 한다면 sizeof(NewUnion) 함수를 이용해서 값을 확인하면
사이즈는 당연히 X = 4바이트 Y = 4바이트해서 8바이트가 나올것이다.
그치만 union일 경우에는 사이즈가 4바이트가 나온다.
내부에서 가장 큰 바이트의 자료형의 크기가 되는것이다.
그러고 나서 내부의 이름은 그 메모리의 첫번째 주소를 가리켜서 메모리를 참조하게 된다.
그림으로 보면 이런 개념으로 되는것이고
각각의 X,Y 변수는 TestUnion의 첫 주소를 가리키는 int& 된다고 보면 된다.
그럼 저기에 20이라는 값이 있으면 X,Y는 둘다 20이 되는것이다.
즉, 내부의 멤버변수들이 메모리를 공유하는 것이다.
#include <iostream>
union TestUnion
{
public:
struct
{
int X;
int Y;
};
int Value;
char Arr[4];
};
위의 코드와 같이 구조체를 넣으면 union의 크기는 8바이트가 되고
구조체와 각 변수들은 메모리의 첫번째 주소를 가리켜서 참조하게 된다.
위와 같이 시작점을 공유하게 되고 Value값을 수정하면 Arr의 값과 X의 값이 수정된다.
'WinAPI' 카테고리의 다른 글
GetAsyncKeyState() 함수 (0) | 2021.01.30 |
---|---|
키 입력, template 가변인자 (0) | 2021.01.30 |
Delta Time (델타 타임) , QueryPerformanceFrequency 함수 (0) | 2021.01.29 |
포인터형 싱글톤 (0) | 2021.01.26 |
파일 경로 관리(문자열 파싱) (0) | 2021.01.23 |