WinAPI

union 문법

Nin 2021. 1. 29. 01:05
#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