공용체(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 |