int compare_int(const void* a, const void* b)
{
int* a1 = (int*)a;
int* b1 = (int*)b;
printf("a的地址:Ox%p,b的地址:Ox%p", &a,&b);
return *b1 - *a1;
}
//执行函数指针的定义,
int(* fp)(const void*, const void*);
fp = &compare_int;
(*fp)(&x, &y);或者(fp)(&x,&y)这2种方式都可以调用。
最后都能输出X,Y的地址。
(2)qsort对整形数组数组进行排序
int arr[] = { 2,10,30,1,11,8,7,111,520 };
qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), &compare_int);
for (int i = 0; i < sizeof(arr) / sizeof(int); i++) {
printf(" %d", arr[i]);
}
(3)qsort对任何型的数组进行排序
int compare_char(const void* a, const void* b)
{
char c1 = *((char*)a);
char c2 =*( (char*)b);
if (c1 >= 'A' && c1 <= 'Z') c1 += 32;
if (c2 >= 'A' && c2 <= 'Z') c2 += 32;
return c1-c2;
}
int main(void)
{
char arr1[] = { "abcdefgABCDEFG" };
qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(char), &compare_char);
for (int i = 0; i < sizeof(arr1) / sizeof(char)-1; i++) {
printf(" %c", arr1[i]);
}
}
编译结果: