就是指向函数的指针。
回调函数,表示了一个函数的地址,将函数作为参数进行使用。参考百度百科:http://baike.baidu.com/view/414773.htm
常用的大概就是在sort函数中了吧。
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
例子如下:
函数:typedef
int
(__stdcall *CompareFunction)(
const
byte*,
const
byte*)
使用者:void
DLLDIR __stdcall Bubblesort(byte* array,
int
size,
int
elem_size,CompareFunction cmpFunc);
使用者:void
DLLDIR __stdcall Quicksort(byte* array,
int
size,
int
elem_size,CompareFunction cmpFunc);
void DLLDIR __stdcall Bubblesort(byte* array,int size,int elem_size,CompareFunction cmpFunc) { for(int i=0; i < size; i++) { for(int j=0; j < size-i-1; j++) { //回调比较函数 if(1 == (*cmpFunc)(array+j*elem_size,array+(j+1)*elem_size)) { //两个相比较的元素相交换 byte* temp = new byte[elem_size]; memcpy(temp,array+j*elem_size,elem_size); memcpy(array+j*elem_size,array+(j+1)*elem_size,elem_size); memcpy(array+(j+1)*elem_size,temp,elem_size); delete [] temp; } } } }
对编写者来说,不必介意函数在何处实现,或它怎样被实现的,所需在意的只是两个用于比较的元素的地址,并返回以下的某个值(库的编写者和使用者都必须遵守这个约定):
·-1:如果第一个元素较小,那它在已排序好的数组中,应该排在第二个元素前面。
·0:如果两个元素相等,那么它们的相对位置并不重要,在已排序好的数组中,谁在前面都无所谓。
·1:如果第一个元素较大,那在已排序好的数组中,它应该排第二个元素后面。
int __stdcall CompareInts(const byte* velem1,const byte* velem2) { int elem1 = *(int*)velem1; int elem2 = *(int*)velem2; if( elem1 < elem2 ) return -1; if(elem1 > elem2) return 1; return 0; } int __stdcall CompareStrings( const byte* velem1, const byte* velem2 ) { const char* elem1 = (char*)velem1; const char* elem2 = (char*)velem2; return strcmp(elem1,elem2); }
应用:
Bubblesort((byte*)array,5,
sizeof
(array[0]),&CompareInts);
Quicksort((byte*)str,5,10,&CompareStrings);