#include <stdio.h>
union Distance
{
int inch;
double meter;
};
int main()
{
union Distance distance = { 20 };
printf("%d\n", distance.inch);
printf("%lf\n", distance.meter);
distance.inch = 20;
distance.meter = 0.508;
printf("%d\n", distance.inch);
printf("%lf\n", distance.meter);
return 0;
}
union 은 구조체와 비슷하지만, 다른점은 변수를 1개만 사용할 수 있다는 것이다.
위의 예제에서 union 은 int inch 와 double meter 두개를 가지고 있지만,
이중 가장큰 double 의 크기인 8 byte 만큼만 할당된다.
이 8 byte 메모리를 int inch 도 쓰고, double meter 도 쓴다.
메모리를 공유 하는 것이다.
그렇기 때문에 int inch 를 사용하면, double meter 는 사용할 수 없다.
double meter 를 사용하면 int inch 를 사용할 수 없다.
union Distance distance = { 20 }; 이런식으로 초기화를 할 때에는
가장 앞에 있는 것만 초기화 할 수 있다.
이경우 int inch 에 20 이 초기화 된다.
printf 문으로 inch 와 meter 를 둘다 찍어보면, inch 는 정상적으로 20이 출력되고,
meter 는 정상적으로 출력이 안된다.
meter 에 값을 대입한 후에(distance.meter = 0.508)
다시 printf 문으로 inch 와 meter 를 확인해보면, 이번에는 meter 만 정상적으로 출력되는것을
확인 할 수 있다.
이렇게 변수 두개 또는 3개 를 넣고 그중 하나만 쓸 일이 뭐가 있냐 싶겠지만,
그 변수가 사용자 정의 변수인 구조체라고 한다면, 유용할 수 있다.
#include <stdio.h>
struct Human
{
const char name[128]; // 이름
const char RR_no[14]; // 주민등록 번호
char Address[256]; // 주소
int age; // 나이
int height; // 키
int weight; // 몸무게
};
struct Animal
{
const char name[128]; // 이름
const char HostName[128]; // 주인 이름
const char kinds[128]; // 종류
int age; // 나이
int weight; // 몸무게
};
union List
{
struct Human human;
struct Animal animal;
};
int main()
{
int a = sizeof(Human);
int b = sizeof(Animal);
int c = sizeof(List);
printf("%d,%d,%d\n", a, b, c);
return 0;
}
// 실행결과
// 412,392,412
어떠한 상황에서 사람에 관한 자료도 필요하고, 애완동물에 대한 자료도 필요하다고 하자.
그리고 그것을 관리해주는 프로그램을 작성한다고 했을 때,
Human 을 쓴다면, Animal 은 필요없고, Animal 을 사용한다면 Human은 필요없을 것이다.
이런경우에 Human 과 Animal 을 union 으로 정의하면 둘중 하나만 쓸 수 있게 될 것이다.
'C언어(2020년)' 카테고리의 다른 글
30. 문자열 (0) | 2020.11.04 |
---|---|
29. typedef (0) | 2020.11.04 |
27. 전처리기 (0) | 2020.11.04 |
26. 가변인자 함수 만들기 (0) | 2020.11.04 |
25. Call by Value, Call by reference, Call by Address (0) | 2020.11.04 |