函式指標淺談 (轉)

amyz發表於2007-08-14
函式指標淺談 (轉)[@more@]

/*
 看到 ilov大作“有沒有試過將作為引數(parameter)來傳遞?”
 (ASP?Id=18162">http://www.csdn.net/develop/Read_Article.asp?Id=18162).
 頗有感觸,下面是我關於“函式指標”和作為引數傳遞的實踐內容,
 不多言,大家親自體會一下即知。
 本人水平有限,歡迎指正(絕不是謙虛^_^)。
 如有錯誤,to:leepyzh@21cn.com">mailto:leepyzh@21cn.com
*/

//如下
//Test on 2000 + 6.0
//
//====================================//

#include "stdafx.h"

typedef bool (*compfunc)(int ,int );
//函式的指標
//compfunc的意思就是:
/*
 指向返回值是bool的函式指標
 compfunc a ====== bool (*a)(int ,int)
*/

//兩個簡單的函式,著相反的功能
bool littletobig(int a,int b) {return bbool bigtolittle(int a,int b) {return b>a;}

void (int &a, int &b){int temp;temp = a,a = b,b = temp;}

//函式的指標為引數
//任意一個陣列排序了
//當傳入littletobig,從小到大排序,反之bigtolittle,從大到小

//兩種函式宣告方法一樣。
#if 0
void sort(int array[],const int size,bool (*comp)(int,int))
#else
void sort(int array[],const int size,compfunc comp)
#endif
{
 int i = 0;
 for(;i < size-1; i++){
 if(comp(array[i],array[i+1]))
 {
 exchange(array[i],array[i+1]);
 sort(array, i+1 ,comp); //遞迴排序
 }
 }
}

int main(int argc, char* argv[])
{
 int arr[] = {3,4,2,1,-1,999,234,34,56,-2,-2};
 //函式指標宣告,一下四種情況完全相同//

//==================================================//
 compfunc up = littletobig,down = bigtolittle; 
 sort(arr,sizeof(arr)/sizeof(int),up);
 sort(arr,sizeof(arr)/sizeof(int),down);
//==================================================//
 bool (*up2)(int ,int) = littletobig;
 bool (*down2)(int ,int); down2= bigtolittle;
 sort(arr,sizeof(arr)/sizeof(int),up2);
 sort(arr,sizeof(arr)/sizeof(int),down2);

//=================================================//
 compfunc funcarray[2] = {littletobig,bigtolittle};
 sort(arr,sizeof(arr)/sizeof(int),funcarray[0]);
 sort(arr,sizeof(arr)/sizeof(int),funcarray[1]);

//=================================================//
 bool (* funcarray2[2])(int,int) = {littletobig};
 funcarray2[1] = bigtolittle;
 sort(arr,sizeof(arr)/sizeof(int),funcarray[0]);
 sort(arr,sizeof(arr)/sizeof(int),funcarray[1]);
//=================================================//

 return 0;
}

//
//
//Reference to http://www.csdn.net/develop/Read_Article.asp?Id=18162.
//
//


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956497/,如需轉載,請註明出處,否則將追究法律責任。

相關文章