8.4.2 동물 이름 저장하기
다음으로 카드에 표시할 동물 이름을 담을 배열을 만듭니다. 동물 이름이 총 10개이므로 10개 공간의 배열로 만들고, 이름은 문자이므로 자료형은 char로 선언합니다. 이때 일반 배열이 아닌 포인터 배열로 선언합니다. 이렇게 하면 어떤 메모리 공간에 동물 이름 10개를 저장하고 이 공간의 시작 주소를 포인터 배열에 저장할 수 있습니다. 배열 요소가 10개이므로 한 칸에 하나씩 총 10개의 주소를 저장합니다. 이 배열 역시 프로그램의 모든 함수에서 사용하므로 main()함수 바깥에 전역변수로 선언합니다. 배열명은 strAnimal로 하고 크기는 10으로 선언합니다.
8.5 프로젝트.c
int arrayAnimal[4][5];
char * strAnimal[10]; // 동물 이름 배열
void initAnimalArray();
Note 포인터 배열
char형 포인터 변수는 char형 값이 저장된 메모리 주소를 저장한 변수라는 뜻입니다. 예를 들어, 다음과 같이 선언하면 ‘테스트’라는 문자열을 어떤 메모리 공간에 저장하고 그 공간의 시작 주소를 cPtr 변수에 저장합니다.
char * cPtr = "테스트";
그림 8-10 포인터 변수의 구조
이런 포인터 변수가 요소로 있는 배열을 포인터 배열이라고 합니다. 즉, 포인터 배열은 요소의 값이 메모리 주소인 배열을 의미합니다.
char형 포인터 배열을 사용하면 char형 배열과 다르게 데이터를 읽기 전용 메모리 공간에 저장합니다. 읽기 전용이라서 한 번 선언하고 나면 데이터를 편집할 수 없습니다. 마치 상수처럼요. 그래서 코드가 실행되는 동안 값이 변경되지 않는다면 char형 포인터 배열을 이용합니다. 동물 카드 뒤집기 게임에서 동물 이름이 바로 그런 경우죠. 게임하는 동안 ‘강아지’를 ‘멍멍이’로 바꿀 필요는 없으니까요.