C語言實現回呼函數的源碼

來源:互聯網
上載者:User

#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;
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.