더보기

자료형 중 파생형 공용체 공부 https://ddanzimind.tistory.com/32

D. 공용체와 열거체
1. 공용체
a. 공용체란?
🌟 union 키워드를 사용하여 선언. 구조체와 거의 동일하지만 모든 멤버 변수가 하나의 메모리 공간을 공유
🎨 도식화
- 모든 멤버 변수가 같은 메모리를 공유해 한 번에 하나의 멤버 변수밖에 사용할 수 없음
- 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입
- 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받음
👉 따라서 공용체 배열을 사용하면, 같은 크기로 구성된 배열 요소에 다양한 크기의 데이터를 저장할 수 있음
🤓 예제 : 공용체의 데이터를 공유
typedef union
{
unsigned char a;
unsigned short b;
unsigned int c;
} SHAREDATA;
int main(void)
{
SHAREDATA var;
var.c = 0x12345678;
printf("%x\n", var.a);
printf("%x\n", var.b);
printf("%x\n", var.c);
return 0;
}
✨ 실행결과
78
5678
12345678
👉 이와같이 공용체에 저장된 값의 의미는 어떤 멤버 변수를 사용했는지 따라 달라짐
따라서 어떤 멤버 변수를 사용했는지 별도로 저장해, 접근할 때에도 같은 멤버 변수를 사용해야 함
2. 열거체
a. 열거체란?
🌟 enum 키워드를 사용하여 선언. 새로운 타입을 선언하면서, 동시에 해당 타입이 가질 수 있는 정수형 상숫값도 같이 명시할 수 있는 타입
(상숫값을 명시하지 않으면 0부터 시작, 그 다음 멤버의 값은 1만큼 증가)
이러한 열거체를 이용하면 프로그램의 가독성이 높아지고, 변수가 지니는 값에 의미를 부여
🤓 예제
enum Weather {SUNNY = 0, CLOUD = 10, RAIN = 20, SNOW = 30};
int main(void)
{
enum Weather wt;
wt = SUNNY;
switch (wt)
{
case SUNNY:
puts("오늘은 햇볕이 쨍쨍!");
break;
case CLOUD:
puts("비가 올락말락하네요!");
break;
case RAIN:
puts("비가 내려요.. 우산 챙기세요!");
break;
case SNOW:
puts("오늘은 눈싸움하는 날!");
break;
default: puts("도대체 무슨 날씨인건가요!!!");
}
puts("각각의 열거체에 해당하는 정수값은 다음과 같습니다.");
printf("%d %d %d %d\n", SUNNY, CLOUD, RAIN, SNOW);
return 0;
}
✨ 실행결과
오늘은 햇볕이 쨍쨍!
각각의 열거체 멤버에 해당하는 정수값은 다음과 같습니다.
0 10 20 30
🤓 예제 : 상숫값을 명시하지 않음
enum Days {MON, TUE, WED, THU, FRI, SAT, SUN};
int main(void)
{
enum Days today;
today = SAT;
if (today >= SAT && today <= SUN)
{
puts("오늘은 주말이네요~ 주말에도 열심히 공부하는 여러분은 최고에요!");
}
else
{
printf("주말까지 %d일 남았어요~ 조금만 더 힘내자구요!", 5 - today);
}
puts("각각의 열거체에 해당하는 정수값은 다음과 같습니다.");
printf("%d %d %d %d %d %d %d\n", MON, TUE, WED, THU, FRI, SAT, SUN);
return 0;
}
✨ 실행결과
오늘은 주말이네요~ 주말에도 열심히 공부하는 여러분은 최고에요!
각각의 열거체 멤버에 해당하는 정수값은 다음과 같습니다.
0 1 2 3 4 5 6
출처 : http://www.tcpschool.com/c/c_struct_unionEnum
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'프로그래밍 언어 > C' 카테고리의 다른 글
[문자와 문자열] 입출력 함수 총정리 1 : 스트림과 문자 (0) | 2023.08.17 |
---|---|
[메모리의 관리] 메모리의 기초 총정리 (0) | 2023.08.17 |
[자료형(data type)] C 구조체 배열과 구조체 포인터, 구조체 활용 (0) | 2023.08.17 |
[자료형(data type)] C 파생형 구조체 기본 (0) | 2023.08.17 |
[자료형(data type)] C 파생형 포인터와 배열 (0) | 2023.08.17 |