函式指標&回撥函式Callback

Desior發表於2020-11-10

函式指標&回撥函式Callback

函式指標與指標函式

指標函式:一個返回指標的函式,其本質是一個函式,而該函式的返回值是一個指標。
宣告格式:*型別識別符號 函式名(參數列)

//指標函式,其返回值是一個int型別的指標,是一個地址
int* fun(int x,int y);

不同寫法
int *fun(int x,int y)
int * fun(int x,int y)

eg:
typedef struct _Data
{
int a;
int b;
}Data;
//指標函式
Data* f(int a,int b)
{
return data;
}
注意:在呼叫指標函式時,需要一個同型別的指標來接收其函式的返回值

函式指標(1)
函式指標:是一個指標變數,該指標指向這個函式,函式指標就是,指向函式的指標。
宣告格式:型別說明符(*函式名)(引數)

//函式指標是需要把一個函式地址賦值給它
int (*fun) (int x,int y);
fun=Function;

函式指標(2)
形式:typedef 返回型別(*新型別)(參數列)

typedef void (pfun) (void) ;//pfun型別是 void()(void)
pfun main; //定義一個void (*main)(void)

PS:
typedef:只對已有的型別進行別名定義,不產生新的型別;
define 只是在預處理過程對程式碼進行簡單的替換
typedef unsigned int UINT32
UINT32 sum;

typedef int arr[3]; //arr 型別是int[3];(存放int型資料的陣列)
arr a; // 定義一個陣列:int a[3];

回撥函式

回撥的意思就是你事先呼叫一下事件繫結函式並把你的函式指標告訴它,等到那個事件發生的時候就會回過頭呼叫你的函式。這是事件驅動的基本概念

一種形式:


   typedef void (*funCallback)(void);   //宣告
   void fun(void);                                 // 宣告邏輯函式 
   funCallback  pfun  =fun;                  // 賦值                              
   pfun();         //呼叫

另一種形式:

//宣告
typedef struct FUN
{
void (*funCallback) ();
}MY_FUN;
extern MY_FUN myfun;

void fun(void);
//初始化
myfun.funCallback=fun;

//引用
myfun.funCallback();

相關文章