#include#include using namespace std; int compare_int(const void* a, const void* b) { int* a1 = (int*)a; int* b1 = (int*)b; return *a1 - *b1; } int compare_char(const void* a, const void* b) { char a1 = *(char*)a; char b1 = *(char*)b; if (a1 >= 'A' && a1 <= 'Z') a1 += 32; if (b1 >= 'A' && b1 <= 'Z') b1 += 32; return a1 - b1; } int main(void) { int x = 20; int y = 10; //定义一个指向函数的指针,就是把函数声明移过来 //把函数名改成(*函数指针名), 其他都不变(形参名可以省略!) int (*fp)(const void*, const void*); //把函数的地址赋值给函数指针 fp = &compare_int; //贝尔实验室的C和UNIX的开发者采用第1种形式, //而伯克利的UNIX推广者却采用第2 种形式ANSI C 兼容了两种方式 //方式一, 按普通指针解引的放式进行调用 //(*fp)(&x, &y); //相当于调用 compare_int(&x, &y); //方式二, 直接调用 //fp(&x, &y); //对arr整形数组进行快速排序, 调用qsort函数 int arr[] = { 2, 10, 30, 1, 11, 8, 7, 111, 520 }; int len = sizeof(arr) / sizeof(arr[0]); qsort(arr, len, sizeof(arr[0]), (*fp)); for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; //对arrc字符数组进行快速排序, 调用qsort函数 char arrc[] = { "abcdefghiABCDEFGHI" }; int len1 = (sizeof(arrc)-1) / sizeof(arrc[0]); int (*cp)(const void*, const void*); cp = &compare_char; qsort(arrc, len1, sizeof(arrc[0]), cp); for (int i = 0; i < len1; i++) { cout << arrc[i] << " "; } cout << endl; system("pause"); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)