/* 指針函數 */
/*
(__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));