|
안녕하세요. 21일만에 끝낸다는 어떤 책을 거의 5개월 간 보고 있는 초보예요.
이제 거의 끝부분인데요, 궁금한 게 하나 있네요. 먼저 다음 코드를 좀 봐주시겠어요.
/*................................ */
01 #include <stdio.h>
02 #include <stdlib.h>
03 #define MAX 20
04 int intcmp(const void *v1, const void *v2);
05 main()
{
int arr[MAX], count, key, *ptr;
printf("Enter %d integer values; press Enter after each. \n", MAX);
for(count=0;count<MAX;count++)
scanf("%d", &arr[count]);
puts("press Enter to sort the values.");
getc(stdin);
/*sorting */
14 qsort(arr, MAX, sizeof(arr[0]), intcmp);
/* printing */
for(count=0;count<MAX;count++)
printf("\n arr[%d]=%d.", count, arr[count]);
puts("\n Press Enter to continue.");
getc(stdin);
/*input searching key */
printf("Enter a value to search for : ");
scanf("%d", &key);
/* executing */
ptr=(int *)bsearch(&key,arr, MAX, sizeof(arr[0]), intcmp);
if(ptr !=NULL)
printf("%d found at arr[%d].", key, (ptr-arr));
else
printf("%d not found.", key);
return(0);
}
31 int intcmp(const void *v1, const void *v2)
32 {
33 return(*(int *)v1 - *(int *)v2);
34 }
/* ---------------------------------------------- */
질문은 두 가지인데요, 첫번째는 14줄에 있는 qsort()에서 intcmp에 관한 겁니다. 제가 알기로는
이게 비교함수에 대한 포인터인데요, 이게 마지막에 있는 함수를 가르키기 위해서는
어떤 작업이 필요한 게 아닌가요? 보통 포인터를 선언하고 이 포인터가 무엇을 가르키게
초기화하잖아요? 그런데 14줄의 intcmp는 그런 게 없어요. 그런데도 자동으로 31번째 줄에
정의되어 있는 함수를 찾을 수 있는 건가요, 단지 이름이 같다는 이유로?
두번째는 31번째 함수 정의 부분에서 *v1과 *v2에 관한 것입니다. 궁금한 건 14번째 줄에서 어떤
인수도 전달하지 않았는데 이 두 값이 무슨 소용이 있고 함수 intcmp()는 무슨 작업을 할 수
있겠는가, 하는 것입니다. 그냥 이런 식으로 작성하면 알아서 하는 건가요?
우스운 질문이 될 수도 있겠지만 답변 좀 부탁드립니다. 전 몹시 궁금하거든요. ^^*
감사합니다.
|