Language/C

[C] 공용체(union) 사용법 및 예제

0so0 2023. 8. 28. 19:00
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