![](https://csdnimg.cn/release/download_crawler_static/86972628/bg4.jpg)
}
cout << array[i] << '/n';
Bubblesort((byte*)array, 5, sizeof(array[0]), &CompareInts);
cout << "After the sorting/n";
for(i=0; i < 5; i++)
cout << array[i] << '/n';
const char str[5][10] = {"estella","danielle","crissy","bo","angie"};
cout << "Before sorting strings with Quicksort/n";
for(i=0; i < 5; i++)
cout << str[i] << '/n';
Quicksort((byte*)str, 5, 10, &CompareStrings);
cout << "After the sorting/n";
for(i=0; i < 5; i++)
cout << str[i] << '/n';
return 0;
如果想进行降序排序(大元素在先),就只需修改回调函数的代码,或使用另一个回调
函数,这样编程起来灵活性就比较大了。
调用约定
上面的代码中,可在函数原型中找到__stdcall,因为它以双下划线打头,所以它是一个
特定于编译器的扩展,说到底也就是微软的实现。任何支持开发基于Win32的程序都必须
支持这个扩展或其等价物。以__stdcall 标识的函数使用了标准调用约定,为什么叫标准约
定呢,因为所有的Win32 API(除了个别接受可变参数的除外)都使用它。标准调用约定的
函数在它们返回到调用者之前,都会从堆栈中移除掉参数,这也是Pascal 的标准约定。但
在 C/C++中,调用约定是调用者负责清理堆栈,而不是被调用函数;为强制函数使用 C/C++
调用约定,可使用__cdecl。另外,可变参数函数也使用 C/C++调用约定。
Windows 操作系统采用了标准调用约定(Pascal 约定),因为其可减小代码的体积。
这点对早期的 Windows 来说非常重要,因为那时它运行在只有640KB 内存的电脑上。
如果你不喜欢__stdcall,还可以使用 CALLBACK 宏,它定义在 windef.h 中:
#define CALLBACK __stdcallor
#define CALLBACK PASCAL //而 PASCAL 在此被#defined 成__stdcall