공용체(Union)
모든 멤버 변수가 하나의 메모리 공간을 공유한다.
- 위의 한 가지 점만 제외한 모든면에서 구조체와 같음.
- 모든 멤버 변수가 같은 메모리를 공유하므로, 공용체는 한 번에 하나의 멤버 변수만 사용 가능하다.
- 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입.
공용체와 구조체의 차이점
구조체(Struct) | 공용체(Union) |
각 멤버가 독립적인 메모리 공간을 가짐 | 모든 멤버가 하나의 메모리 공간을 공유 |
구조체의 크기는 모든 멤버의 크기의 합 | 공용체의 크기는 가장 큰 멤버의 크기 |
동시에 여러 멤버에 값 저장 가능 | 한 번에 하나의 멤버만 유효한 값을 저장 |
예시
#include <stdio.h>
union Data { // Union 정의
char c; // 1byte
int d; // 4byte
float f; // 4byte
};
int main() {
union Data data;
data.d = 1661;
printf("int value: %d\n", data.d); // 1661
printf("Char value from int: %d\n", data.c); // 125
data.c = 3;
printf("int value: %d\n", data.d); // 1539
printf("Char value from int: %d\n", data.c); // 3
data.f = 2.71828f;
printf("Float value: %f\n", data.f); // 2.718280
printf("Char value from float: %d\n", data.c); // 77
return 0;
}
- 공용체는 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받는다.
- 공용체에 저장된 값의 의미는 저장할 때 공용체의 어떤 멤버 변수를 사용했는지에 따라 달리 해석된다.
열거체(enumerated types)
- 새로운 타입을 선언하면서, 동시에 해당 타입이 가질 수 있는 정수형 상숫값도 같이 명시할 수 있는 타입.
- 이를 통해, 가독성이 높아지고 변수가 지니는 값에 의미를 부여할 수 있다.
'IVS > C 프로그래밍' 카테고리의 다른 글
[C] 매크로(macro) 함수, 조건부 컴파일 (0) | 2025.01.13 |
---|---|
[C] 함수 포인터 (0) | 2025.01.13 |
[C] 지역변수(local), 전역변수(global), 정적변수(static) (0) | 2025.01.13 |
[C] 구조체 - 바이트 패딩(Byte Padding) (0) | 2025.01.13 |
[C] 배열 복사- memcpy, 비교- memcmp (0) | 2025.01.13 |