C 언어에서 공용체( Union ) 사용하기
C 언어의 공용체 ( Union )는 선언하는 형식은 구조체와 거의 같다. 공용체는 멤버변수 중에서 가장 큰 메모리 사이즈를 가진 변수의 크기로 메모리가 할당되므로 공용체에는 다수개의 멤버변수를 선언할 수 있으나 한 시점에서 가장 마지막에 할당한 한개의 멤버 변수만 그 값을 유지하게 된다. 여러개의 멤버변수들 중에서 동시에 한개의 변수만 사용할 필요한 경우, 메모리 사용량을 줄일 목적으로 공용체를 사용할 수 있다
공용체의 특징
구조체처럼 다수개의 멤버변수를 선언할 수 있다
공용체에 할당되는 메모리는 멤버변수 중에서 가장 큰 멤버변수의 크기로 할당된다
멤버변수 중에서 동시에 한개의 멤버변수만이 그 값을 유지한다
공용체 선언 형식
union [ union tag ] // union tag는 옵션
{
한개 이상의 멤버 변수 ;
} [ 한개 이상의 공용체 변수 ] ; // 공용체 변수는 옵션
공용체 선언 예
union User
{
int id ;
char email[20] ;
char phone[20] ;
} guest ;
공용체의 사용 예
#include <stdio.h> #include <string.h> // 공용체 선언 union User { int id; char email[20]; char phone[20]; }; void printUser(union User *user); // Call by reference int main() { // 공용체 변수 선언 union User guest; // 공용체 변수 초기화 guest.id = 10; strcpy(guest.phone, "010-5478-6544"); strcpy(guest.email, "hong@daum.net"); // 가장 마지막에 할당한 멤버변수의 값만 유지된다 // 공용체 주소 전달 printUser(&guest); // Call by reference : 공용체의 주소가 복사되어 전달됨 return 0; } // 공용체 포인터를 파라미터로 선언한 함수 void printUser(union User *user) { printf("번호:%d, 전화:%s, 메일:%s \n", (*user).id, (*user).phone, (*user).email); printf("번호:%d, 전화:%s, 메일:%s \n", user->id, user->phone, user->email ); }