我在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)) {
...
}
}
}
...
}