Page 123 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 123
40 (int(*)(const void *, const void *)) int_cmpr /* 비교 함수 */
41 );
42 if(p == NULL)
43 puts("검색에 실패했습니다.");
44 else
45 printf("%d는(은) x[%d]에 있습니다.\n", ky, (int)(p - x));
46 free(x); /* 배열을 해제 */
47 return 0;
48 }
앞 프로그램과 다른 점을 코드에 초록색 박스로 표시해 두었습니다. 비교 함수 int_cmpr가
반환하는 값의 부호만 오름차순 정렬 프로그램(실습 3-5)의 int_cmp 함수와 반대로 되어 있
습니다. 이처럼 비교 함수의 반환값을 잘 변경하면 내림차순으로 정렬된 배열에서도 검색이
가능합니다.
보충수업 3-3 함수 포인터
함수 포인터는 이름 그대로 함수를 가리키는 포인터입니다. 함수 포인터의 자료형은 가리키는 함수
에 따라 다릅니다. 예를 들어, 함수 double func(int)를 가리키는 포인터형과 함수 int kansu(int,
long)을 가리키는 포인터형은 다른 자료형입니다.
아래처럼 선언한 함수를 살펴보겠습니다. 이 함수는 ‘int형 인수를 받아들여 double형 값을 반환하는
함수’입니다.
double func(int); /* int를 받아들여 double을 반환하는 함수 */
이 함수를 가리키는 포인터형은 int형 인수를 받아들여 double형 값을 반환하는 함수에 대한 포인터
입니다. 따라서 이 함수를 가리키는 포인터 fp의 선언은 아래와 같습니다.
double(*fp)(int); /* int를 받아들여 double을 반환하는 함수에 대한 포인터 fp의 선언 */
변수 이름 앞에 *를 붙이는 것은 객체에 대한 포인터의 선언과 같습니다. 다만 변수 이름을 ( )로 감싸야
합니다. 왜냐하면 ( )를 생략하여
double *fn(int); /* int를 받아들여 double에 대한 포인터를 반환하는 함수 선언 */
03•검색 123