
전혀 관련없어 보이는 두 주제를 함께 다룬 이유는.... 이번 실습에 두 개념을 활용해야 하더군요.
차피 놓친 개념은 다시 공부해야 해서, 한 글로 적었습니다.
// 열거형 선언: 중괄호 내 멤버를 콤마로 나열
typedef enum _food {MANDU, PASTA, CHEESECAKE, ICECREAM} Food;
// MANDU는 0, PASTA는 1, CHEESECAKE은 2, ICECREAM은 3
Food f; // 열거형 변수 선언
char *pc = NULL; // 문자열을 저장할 포인터
f = MANDU; // 열거형 변수에 값 대입 (실제론 0)
switch (f){
case MANDU: // 실제론 case 0
pc = "비비고 김치 만두";
break;
case PASTA: // 실제론 case 1
pc = "봉골레 파스타";
break;
case CHEESECAKE: // 실제론 case 2
pc = "필라델피아 치즈 케이크";
break;
case ICECREAM: // 실제론 case 3
pc = "나뚜르 녹차 아이스크림";
break;
}
printf("오늘 점심 메뉴는 %s\n", pc);
// [출력] 오늘 점심 메뉴는 비비고 김치 만두
MANDU는 0, PASTA는 1, CHEESECAKE은 2, ICECREAM은 3int형과 같은 크기로, 정수를 저장할 수 있음enum _food {MANDU = 13, PASTA, CHEESECAKE = 30, ICECREAM};PASTA는 14, ICECREAM은 31으로 해석됨const 예약어를 포인터에 사용하면, 간접 참조 연산자(*)를 이용해 가리키는 변수의 값을 바꿀 수 없음int a = 303, b = 216;
const int *pi = &a;
*pi = 404; // 간접 참조 연산 수행해서 값 수정 불가능
printf("*pi: %d\n", *pi);
// [실행결과] error: assignment of read-only location ‘*pi’
* 없이, 직접 가리키는 변수에 값을 대입하는 것 역시 여전히 가능int a = 303, b = 216;
const int *pi = &a;
printf("*pi: %d\n", *pi); // *pi: 303
pi = &b; // 포인터가 저장한 주소는 수정 가능
printf("*pi: %d\n", *pi); // *pi: 216
pi = &a;
a = 404; // 직접 가리키는 변수에 값을 대입하는 것 역시 가능
printf("*pi: %d\n", *pi); // *pi: 404