Programming/C
[Programming/C] 공용체 (union)
scii
2020. 6. 16. 19:55
공용체를 적재적소에 활용하면 메모리를 절약할 수 있다. 사용자 정의 자료형을 만드는 구조체와 문법 구조가 비슷한 공용체 문법이 있다.
공용체의 요소들은 할당된 메모리를 공유한다.
union SharedData {
char c_data;
short int s_data;
int i_data;
};
공용체를 구성하는 각 요소들은 서로 같은 메모리를 공유하는 형태로 된다. SharedData 공용체는 총 4바이트를 사용한다.
// 리틀 엔디안 방식이라고 가정
union SharedData tmp;
tmp.i_data = 0x12345678;
위와 같이 값을 대입하면 c_data는 0x78, s_data는 0x78 0x56, i_data는 0x78 0x56 0x34 0x12 가 들어간다.
#pragma warning(disable: 4996)
#include <stdio.h>
union SharedType {
int i_data;
float f_data;
};
struct MyData {
char type;
union SharedType data;
};
int main(void) {
struct MyData a, b;
a.type = 0;
a.data.i_data = 100;
b.type = 1;
b.data.f_data = 3.14f;
return 0;
}
동시에 사용하지 않는다는 조건만 만족한다면 몇 개의 변수를 사용하든 상관 없이 공용체로 해당 변수들을 묶어서 메모리를 절약할 수 있다.