2014-07-22 6 views
0

아래 샘플은 Apple 문서에서 보았습니다. qsort_b 전화를 걸면 어떻게됩니까? 전달해야 할 매개 변수는 무엇입니까 const void *l & const void *r입니다.이 함수를 호출하는 방법은 무엇입니까?

void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *)); 

void qsort_b(void *base, size_t nel, size_t width, int (^compar)(const void *, const void *)); 

블록의 목적은 다음과 같습니다

char *myCharacters[3] = { "TomJohn", "George", "Charles Condomine" }; 
qsort_b(myCharacters, 3, sizeof(char *), ^(const void *l, const void *r) { 
    char *left = *(char **)l; 
    char *right = *(char **)r; 
    return strncmp(left, right, 1); 
}) 

답변

2

문서에 따르면, 표준 C 라이브러리 qsortqsort_b 차이는 qsort_b 오히려 함수 포인터보다는 block 소요한다는 것이다 비교 함수의 경우와 동일 - 배열의 두 요소가 같은지 여부와 그렇지 않은 경우 중 어느 것이 다른 것보다 큰지를 결정합니다.

매개 변수는 무엇 const void *l & const void *r로 전달할 필요가 있는가?

이 매개 변수를 전달하는 것은 당신이 아닙니다. 이러한 매개 변수는 비교 블록 qsort_b에 전달됩니다. 첫 번째 매개 변수는 비교되는 왼쪽 요소의 값입니다. 두 번째 것은 오른쪽에있는 요소입니다.

관련 문제