본문 바로가기

C-Language/Unions

Unions in C Language

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 );
}