C언어 사용자정의 자료형 공용체

    2018-02-08 02:56:42 작성

    공용체란 동일한 저장공간을 서로다른 자료형으로 사용하기 위한 자료형입니다.

    공용체의 정의

    공용체는 union 키워드를 사용하며 사용방법은 구조체와 매우 비슷 합니다. 다음 예제는 구조체와 공용체를 비교합니다.

    #include <stdio.h>
    
    typedef struct _sValue{
    	int a;
    	float b;
    	double c;
    } sValue;
    
    typedef union _uValue{
    	int a;
    	float b;
    	double c;
    } uValue;
    
    int main(void) {
    	sValue sVal;
    	uValue uVal;
    
    	printf("구조체 정보 \n");
    	printf("sVal size : %d\n", sizeof(sVal));
    	printf("sVal.a : %p\n", &sVal.a);
    	printf("sVal.b : %p\n", &sVal.b);
    	printf("sVal.c : %p\n", &sVal.c);
    	printf("\n공용체 정보 \n");
    	printf("uVal size : %d\n", sizeof(uVal));
    	printf("uVal.a : %p\n", &uVal.a);
    	printf("uVal.b : %p\n", &uVal.b);
    	printf("uVal.c : %p\n", &uVal.c);
    	return 0;
    }


    구조체는 int(4), float(4), double(8) 해서 크기가 16이고, 각 멤버의 주소가 다릅니다.
    공용체는 가장큰 double(8)멤버의 크기가 되어 8이고 각멤버의 주소가 모두 같습니다.

    공용체의 유용함은 하나의 메모리 공간을 둘이상의 방식으로 접근할 수 있다는 것입니다.
    다음은 정수의 곱셈 나눗셈 프로그램입니다.

    #include <stdio.h>
    
    typedef union _value {
    	int valInt;
    	double valDouble;
    } Value;
    
    Value mul(int num1, int num2);
    Value div(int num1, int num2);
    
    int main(void) {
    	Value a = mul(10, 3);
    	Value b = div(10, 3);
    
    	printf("a : %d\n", a.valInt);
    	printf("b : %f\n", b.valDouble);
    }
    
    Value mul(int num1, int num2) {
    	Value val;
    	val.valInt = num1 * num2;
    	return val;
    }
    
    Value div(int num1, int num2) {
    	Value val;
    	val.valDouble = (double)num1 / num2;
    	return val;
    }


    곱셈함수와 나눗셈함수 모두 Value 자료형을 반환합니다.
    곱셈함수에서는 int 값으로 저장하고, 나눗셈함수에서는 double 값으로 저장합니다.
    공용체를 사용하면 같은 메모리 공간을 다른 형식으로 접근할 수 있습니다.