compare函数如何调用数组元素,以及调用的顺序是什么



我在qsort(arr, n, sizeof(int), compare)中遇到问题以下是compare如何调用其参数。正如我所知,它是一个空指针,它调用数组元素的地址,然后比较值。但是它是如何知道数组元素的顺序的。

我还附上了整个代码和函数的定义。

#include <stdio.h>
#include <stdlib.h>
int compare(const void * a, const void * b)
{
    return ( *(int*)a - *(int*)b );
}
int main ()
{
    int arr[] = {10, 5, 15, 12, 90, 80};
    int n = sizeof(arr)/sizeof(arr[0]), i;
    qsort (arr, n, sizeof(int), compare);
    for (i=0; i<n; i++)
        printf ("%d ", arr[i]);
    return 0;
}

类似这个的东西

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)){
    char *ptr1, *ptr2;
    int j, i;
    for (j = 0 ; j < nitems ; j++){
        ptr1 = ((char*) base) + (j * size);
        for( i = 0 ; i < nitems ; i++){
           ptr2 = ((char*) base) + (i * size);
           if( compar(ptr1, ptr2)) {
               ...
           }
       }
    }
    ...
}

最新更新