티스토리 뷰

Etc.

C의 union은 무엇이고 언제 사용할까?

ccc124213131 2021. 10. 3. 21:02
728x90

위키피디아의 정의에 따르면 union은 각 데이터 멤버가 메모리 상에서 같은 위치에서 시작한다는 점을 제외하면 struct와 거의 동일하다. struct는 각 데이터 타입에 따라 별도의 메모리 공간에 멤버를 저장한다. 따라서 이들은 size 면에서 차이가 난다. 구체적으로 64 bit platform에서는 union의 size는 char*의 size와 같다. 또한 struct와 동일하게, 모든 멤버들은 기본적으로 public이다. union은 다양한 데이터 타입에 의해 자주 사용되는 메모리 위치에 접근을 허용할 때 주로 사용된다. 

 

대부분의 경우 union은 struct 안에 래핑하여 사용되고, struct의 한 멤버가 union의 어떤 요소에 접근할 수 있는 지 알려주는 용도로 사용된다. 예를 들면 다음과 같다.

struct _mydata {
    int which_one;
    union _data {
            int a;
            float b;
            char c;
    } foo;
} bar;

switch (bar.which_one)
{
   case INTEGER  :  /* access bar.foo.a;*/ break;
   case FLOATING :  /* access bar.foo.b;*/ break;
   case CHARACTER:  /* access bar.foo.c;*/ break;
}

 

댓글