函數指針和回調函數

/* 指針函數 */
/* 
   (__type__*) function(int, int)返回的是指針地址,
   (__type__) function(int, int)返回的是int型數據。
 */

/* 函數指針 */
/* 函數指針有兩個用途:調用函數和做函數的參數。 */
/* __type__ (*function)(int, int) */
/* 
   只是一個指針,變量指針是指向一個變量的地址,
   結構體指針是指向一個結構體的首地址,
   而函數指針是指向一個函數的地址,
   它是一種類型,比int,char高級的類型。
 */

/* 回調函數 */

int (*function)(int, int);
typedef int (*pfun)(int, int);

int Max(int a, int b)
{
    return a > b ? a : b;
}

int Min(int a, int b)
{
    return a < b ? a : b;
}

/* 函數指針調用例子 */
int Num1 = 20, Num2 = 30;

function = Max;
printf("Max is %d\n", function(Num1, Num2));
printf("Max is %d\n", (*function)(Num1, Num2));
function = Min;
printf("Min is %d\n", function(Num1, Num2));
printf("Min is %d\n", (*function)(Num1, Num2));

printf("------------\n");
	
pfun pf = Max;
/* 相當於定義了 int (*pf)(int, int); */
printf("Max is %d\n", pf(Num1, Num2));
printf("Max is %d\n", (*pf)(Num1, Num2));
pf = Min;
printf("Min is %d\n", pf(Num1, Num2));
printf("Min is %d\n", (*pf)(Num1, Num2));

typedef int (*test_callback_t)(int status);
int test_callback(int data)
{
	printf("get data:%d\n", data);
	return (data * 2);
}

int rt_data(int data, test_callback_t cb)
{
	return ((*cb)(data));
}
/* 回調函數調用例子 */
printf("rt_data:%d\n", rt_data(10, test_callback));

 

發佈了18 篇原創文章 · 獲贊 2 · 訪問量 6046
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章