Page 59 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 59
main 함수에서 선언한 배열 height의 요소가 의미하는 것은 사람의 ‘키’입니다. 먼저 사람 수
(배열의 요소 개수)를 변수 number에 입력하고 자료형이 int형, 요소 개수가 number인 배열
height를 생성합니다. 각 요소에 값을 읽어 들인 후 배열 height와 그 요소 개수 number를
maxof 함수에 전달하고 maxof 함수를 호출합니다. 호출된 maxof 함수는 배열 요소의 최댓
값을 구한 다음 반환합니다. main 함수는 maxof 함수가 반환한 최댓값을 출력합니다. 마지
막으로 메모리를 확보하고 있는 배열을 free 함수로 해제하고 프로그램을 종료합니다.
이 프로그램은 메모리 할당에 성공했는지를 검사하는 코드를 생략합니다(이후의 프로그램 대부분도 이런 방식으로 진행
합니다).
보충수업 2-3 함수의 매개변수로 배열 사용하기
실습 2-5에서 초록색 박스로 표시한 부분은 배열 height 요소의 최댓값을 구하기 위한
maxof 함수의 호출입니다. 이때 함수로 배열의 주소를 전달하는 과정을 그림 2C-2에 나타
냈습니다. 여기서 maxof 함수의 매개변수 a의 선언(const int a[])에 대해 조금만 더 살펴보겠
습니다. C 언어의 함수 선언에서 매개변수의 배열 표기(a[])는 배열이 아니라 포인터를 선언
하는 것과 같습니다. 그러므로 매개변수 선언인 const int a[]는 const int *a로 해석됩니다.
이때 매개변수를 선언할 때 붙이는 const는 함수에서 그 인수가 가리키는 배열의 요솟값에
직접적으로 ‘쓰기’를 할 수 없게 만듭니다. 이렇게 하면 maxof 함수 안에서 a[i]의 값은 ‘읽기’
만 가능하고, ‘쓰기’는 불가능하게 됩니다.
int main(void)
{
int *height;
매개변수는 실인수에서 초기화됩니다. /* … */
maxof( height , number)
const int *a = height; /* … */
}
포인터 height의 값(첫 번째 요소의 주소)이 전달됩니다.
int maxof(const int a[], int n)
{
/* … */
포인터 주소(address)를 복사합니다.
}
height 0 172 a
1 153
2 192
3 140
4 165
main 함수의 height와 maxof 함수의 a는 같은
배열의 첫 번째 요소를 가리킵니다.
[그림 2C-2] 함수로 배열을 전달하는 과정
02• 기본 자료구조 59