enum은 열거형이라고 하며, 관련있는 상수들의 집합에 이름을 부여하기 위해 사용한다. Enum은 컴파일러에 의해 정수형으로 처리되고, 각 항목은 기본적으로 0부터 시작하여 1씩 증가하는 정수 값을 가진다.
프로그래머는 시작 값을 지정할 수 있고, 그 경우 해당 값부터 1씩 증가한다.
Enum의 각 항목은 컴파일러에 의해 정수형으로 처리되므로 int형 데이터이고, 메모리 상에서 각 Enum 값이 해당 정수 값으로 저장된다. Enum 타입의 변수는 그 변수가 가질 수 있는 Enum 항목 중 하나의 값을 저장하는데 사용하며, 메모리 상에서는 단순한 정수 값으로 처리된다.
#include <stdio.h>
enum week{Sun, Mon, Tue, Wed, Thu, Fri, Sat};
int main() {
enum week today;
today = Wed;
printf("%d", today); // 출력: 3
}
union은 다양한 데이터 타입들이 같은 메모리 위치를 공유할 수 있도록 하는 사용자 정의 타입이다. 구조체와 유사하게 멤버를 정의할 수 있지만, 모든 멤버들이 하나의 메모리 공간을 공유한다.
Union의 크기는 그 안에 잇는 가장 큰 멤버의 크기와 동일하다. 이는 여러 멤버들이 동일한 메모리 주소를 공유하기 때문이다. 한 멤버의 값을 할당하면, 해당 메모리 위치에 저장되며 다른 멤버에 접근할 때는 같은 메모리 위치의 내용을 다른 타입으로 해석하여 사용한다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
data.i = 10;
printf("data.i : %d\n", data.i);
data.f = 220.5;
printf("data.f : %.2f\n", data.f);
strcpy(data.str, "C Programming");
printf("data.str : %s\n", data.str);
}