前进的道路不是一帆风顺的,要随时迎接挑战,敢于战胜困难!

坚持一下,找人聊聊天,释放一些压力!

 

C语言实现回调函数的源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef char byte;

typedef int (__stdcall *CompareFunction)(const byte*, const byte*);

void  __stdcall Bubblesort(byte* array,int size,int elem_size,CompareFunction cmpFunc)
{
 for(int i=0; i < size; i++)
 {
  for(int j=0; j < size-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;
   }
  }
 }
}

//////////////////////////////////////////////////////////////////////////
//对使用者来说,必须有一个回调函数,其地址要传递给Bubblesort()函数。下面有二个简单的示例,
//一个比较两个整数,而另一个比较两个字符串:


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);
}
//////////////////////////////////////////////////////////////////////////


int main(int argc, char* argv[])
{
 int i;
 int array[] = {5432, 4321, 3210, 2109, 1098};
 printf("Before sorting ints with Bubblesort:\n");
 for(i=0; i < 5; i++)
  printf("%d  ", array[i]);
 Bubblesort((byte*)array, 5, sizeof(array[0]), &CompareInts);
 printf("\nAfter the sorting:\n");
 for(i=0; i < 5; i++)
  printf("%d  ", array[i]);
 printf("\n");

 system("pause");
 return 0;
}

posted on 2009-06-15 16:41  山径山精  阅读(1196)  评论(0编辑  收藏  举报

导航