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
   118   119   120   121   122   123   124   125   126   127   128