Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[1498] Re:초보의 질문입니다.
오전&오후 [kkhhyy11] 1326 읽음    2002-11-07 09:44

void qsort(void *base, size_t nelem, size_t width, int(*fcmp)(const void *, const void *);
//base : 정렬을 할 데이타가 있는 테이블의 선두 번지이다. 주로 배열에 데이터를 저장해두므로
       배열명을 그대로사용한다.
//nelem : 정렬을 할 항목의 개수
//width : 정렬할 데이타의 크기
//fcmp : 정렬에 사용될 항목 비교 함수
마지막 인수는 함수 포인터로 되어 있네여..그러므로 함수명만 주면 당연히 찾아가겠지여..??
그리고 파라미터는 아마 함수내부에서 넘겨주는거 같네여..^^;
인자로 함수의 주소값만 넘어가고..
qsort함수 내부에서 fcmp함수에 파라미터를 넣겠져...^^;
모두 정렬할때까지 내부적으로 fcmp함수를 계속 호출하겠네여..
소스를 봐야지 정확히 알겠지만여..그럼 ..


또치 님이 쓰신 글 :
: 안녕하세요. 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()는 무슨 작업을 할 수
: 있겠는가, 하는 것입니다. 그냥 이런 식으로 작성하면 알아서 하는 건가요?
:
: 우스운 질문이 될 수도 있겠지만 답변 좀 부탁드립니다. 전 몹시 궁금하거든요. ^^*
:
: 감사합니다.
:
:
:
:                    

+ -

관련 글 리스트
1495 초보의 질문입니다. 또치 1350 2002/11/06
1498     Re:초보의 질문입니다. 오전&오후 1326 2002/11/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.