728x90
반응형
SMALL
공용체(union)에 대한 정리(+예제)
공용체(union)
같은 메모리 주소 안에서 여러 형식을 가질 수 있는 값
한 번에 한 가지의 데이터 형만 보관할 수 있는 구조체
모든 멤버 변수가 같은 메모리를 공유하므로, 공용체는 한 번에 하나의 멤버 변수만 사용
728x90
공용체 정의
union Person {
char* name;
int age;
double weight;
};
- 각 자료형 중 가장 큰 자료형의 크기만큼 공간을 할당받아 공용으로 사용
- char*는 4byte(32bit 기준), int는 4byte, double은 8byte이기 때문에 가장 큰 크기인 8byte를 할당받음
공용체 선언 및 예제
int main(void) {
union Person student = { "0so0" };
printf("크기 : %d\n", sizeof(student));
printf("1. 이름 : %s, size : %d\n", student.name, sizeof(student.name));
printf("1. 나이 : %d, size : %d\n", student.age, sizeof(student.age));
printf("1. 무게 : %lf, size : %d\n", student.weight, sizeof(student.weight));
return 0;
}
student의 크기는 멤버 중 가장 크기가 큰 자료형인 double의 크기로 8byte가 할당 됨
name만 초기화 할 경우 나머지 변수 값은 쓰래기값 출력
int main(void) {
union Person student = { "0so0" };
printf("크기 : %d\n", sizeof(student));
printf("1. 이름 : %s, size : %d\n", student.name, sizeof(student.name));
printf("1. 나이 : %d, size : %d\n", student.age, sizeof(student.age));
printf("1. 무게 : %lf, size : %d\n", student.weight, sizeof(student.weight));
student.age = 18;
//printf("2. 이름 : %s\n", student.name);
printf("2. 나이 : %d\n", student.age);
printf("2. 무게 : %lf\n", student.weight);
return 0;
}
나이에 값을 할당 할 경우 한번에 한개의 멤버만 사용 가능하기 때문에 name에 접근시 예외 발생
int main(void) {
union Person student = { "0so0" };
printf("크기 : %d\n", sizeof(student));
printf("1. 이름 : %s, size : %d\n", student.name, sizeof(student.name));
printf("1. 나이 : %d, size : %d\n", student.age, sizeof(student.age));
printf("1. 무게 : %lf, size : %d\n", student.weight, sizeof(student.weight));
student.age = 18;
//printf("2. 이름 : %s\n", student.name);
printf("2. 나이 : %d\n", student.age);
printf("2. 무게 : %lf\n", student.weight);
student.weight = 48.9;
//printf("2. 이름 : %s\n", student.name);
printf("3. 나이 : %d\n", student.age);
printf("3. 무게 : %lf\n", student.weight);
return 0;
}
이전에 할당한 나이 값은 사라지고 마지막에 할당한 무게 값만 남음
SMALL
728x90
반응형
LIST
'Language > C' 카테고리의 다른 글
[C] Compile/Build 과정 (0) | 2023.09.07 |
---|---|
[C] 자료구조 스택(stack) (0) | 2023.08.16 |
[C] 자료구조 큐(queue) (1) | 2023.08.09 |
[C] memset 사용법 및 예제 (0) | 2023.07.26 |