#include <stdio.h>
union Umemory
{
char c;
int i;
double d; // size는 큰 놈 기준으로
};
void main()
{
// 공용체(Union)
union Umemory mem;
printf("mem: %p\n", &mem); //mem: (위치값)
mem.c = 'a'; //mem.c: 'a' 초기화
printf("mem.c: %c (%p)\n", mem.c, &mem.c); //mem.c: a (위치값)
mem.i = 123; //mem.i: 123 초기화
printf("mem.i: %d (%p)\n", mem.i, &mem.i); //mem.i: 123 (위치값)
mem.d = 3.14; //mem.d: 3.14 초기화
printf("mem.d: %lf (%p)\n", mem.d, &mem.d); //mem.d: 3.140000 (위치값)
printf("mem Size: %d byte\n", sizeof(mem)); //mem Size: 8byte (double)
}
공용체는 구조체와 비슷하지만 다른 점은 각 멤버 변수의 메모리 할당인데, 구조체는 각 멤버가 독립적인 메모리에 배치되지만, 공용체는 같은 메모리 공간을 공유합니다. 그 메모리의 크기는 큰 자료형의 기준을 가집니다. 위의 코드상 double이 가장 크기 때문에 c, i, d 모두 8byte 안에 사용됩니다. 구조체라면 16byte가 나왔을 겁니다. 메모리를 아끼고 싶을 때 사용합니다.
위의 코드는 Umemory라는 공용체에 c, i, d의 멤버 변수를 정의합니다. 위의 주석에 나오는 %p의 위치값은 같은 메모리를 공유하는 공용체의 특성상 모두 같은 주소값이 출력됩니다.
끝
'프로그래밍 C언어' 카테고리의 다른 글
다차원배열 (Multi-Dimensional Array) (0) | 2024.08.21 |
---|---|
상수 열거형 (Enumeration) (0) | 2024.08.20 |
구조체 (Structure) (0) | 2024.08.20 |
비트 단위 연산자 (Bitwise Operators) (0) | 2024.08.18 |
동적 메모리 할당 (Dynamic Memory Allocate) (0) | 2024.08.18 |