공용체(Union Type)의 정의와 의미

<구조체와 Union address, value 확인>

#include <stdio.h>
#include <stdint.h>

typedef struct {
    int a;
    int b;
    char c;
} number;

typedef union {
    int a;
    int b;
    char c;
    char d;
} utemp;

int main()
{
    number num1;
    utemp utem;
    utem.a=4;
    utem.b=6;
    utem.c='a';
    utem.d='b';
    printf("\n[STRUCT]\n"); 
    printf("size=%d\n",sizeof(num1));
    printf("size=%p\n",&num1.a);
    printf("size=%p\n",&num1.b);
    printf("size=%p\n",&num1.c);
    printf("\n[UNION]\n"); 
    printf("size=%d\n",sizeof(utem));
    printf("size=%p\n",&utem.a);
    printf("size=%p\n",&utem.b);
    printf("size=%p\n",&utem.c);
    printf("size=%p\n\n",&utem.d);
}


<struct 안의 union 공용체 address, value 확인>

#include <stdio.h>
#include <stdint.h>

typedef struct {
        int a;
        int b;
        char c;
union {
        int d;
        int e;
        char f;
};
        int g;

} number;

int main()
{
        number num1;
        num1.a = 1;
        num1.b = 2;
        num1.d = 4;
        printf("\n[STRUCT]\n");
        printf("size=%d\n\n",sizeof(num1));
        printf("b=%p\n",&num1.b);
        printf("c=%p\n",&num1.c);
        printf("d=%p\n",&num1.d);
        printf("e=%p\n",&num1.e);
        printf("f=%p\n",&num1.f);
        printf("g=%p\n\n",&num1.g);

}

struct 안에 union 선언을 한 경우 union 구조체 자체가 한 개의 메모리를 할당 받아서 사용함을 알 수 있다.


정의방식의 차이 :

struct선언 or union 선언

메모리 공간 할당되는 방식과 접근 결과 차이

1. 

sizeof로 구조체와 공용체(union) 찍어보면 각각 12, 4 출력

2. 

구조체 변수 - 구성 멤버는 각각 메모리 할당, 하지만 그 구조체 내부의 변수 타입중 가장 큰 놈의 사이즈로 모두 할당해버림.

공용체 변수 - 각각 할당(X), 크기가 가장 큰 멤버의 변수 타입만 하나 할당되어 이를 공유

공용체의 멤버에 값을 한 번 대입하고, 두 번 대입하면 두 번째 값이 모든 값을 덮어씀


typedef union

{

int n1;

int n2;

double n3;

};

위의 코드처럼 선언하면 밑에 그림처럼 생성이 된다.


'언어 > C' 카테고리의 다른 글

파일 입출력 -1  (0) 2016.03.10
구조체 기초 (열거형 enum)  (0) 2016.03.10
escape sequence  (0) 2016.02.26
counting program  (0) 2016.02.18
Symbolic Constants  (0) 2016.02.16
Posted by 知彼知己百戰不殆
,