回調函數 就是上層調用 設置下去
創新互聯專業提供服務器托管服務,為用戶提供五星數據中心、電信、雙線接入解決方案,用戶可自行在線購買服務器托管服務,并享受7*24小時金牌售后服務。
底層通過函數指針調用上層函數
多文件中才有用 單文件可以模擬
比如
#include?stdio.h
typedef?void?(*pFuncCb)?(int);//定義回調函數。
void?callback1(int?a)
{
printf("callback?function1?is?called?and?parameter?=?%d\n",?a);//打印1
}
void?callback2(int?a)
{
printf("callback?function2?is?called?and?parameter?=?%d\n",?a);//打印2
}
pFuncCb?callback_function;
void?lowerFunc(int?n)
{
int?i;
for(i?=?n;?i??n+10;?i?++)
if(callback_function)?callback_function(i);
}
int?main()
{
callback_function?=?callback1;
lowerFunc(1);//?會打印十次?打印1,?1到10
callback_function?=NULL;
lowerFunc(10);//沒有打印。
callback_function?=?callback2;
lowerFunc(100);//?會打印十次?打印2,?100到110
return?0;
}
從功能上來說 普通函數也是可以的
但在比較大的程序設計中 會對很多功能模塊進行封裝
比如 上層一個模塊
底層一個模塊
同時規定,上層可以調用底層的函數,但是底層不可以調用上層函數。
這時就需要使用回調函數。
通過上層調用底層的注冊回調借口,傳入回調指針。
實現底層通知上層的作用。
另外 回調函數的一個好處是,可以通過回調函數,調用不同接口。
比如接收數據,不同數據需要不同的解析函數。
但是接收數據的流程是相同的
這樣 使用回調函數,在接收數據的時候就可以不用判斷,而是自動使用不同的解析函數。
總之 使用回調函數,可以降低耦合,實現多樣性。
typedef
struct
{
int
a;
void
(*pshow)(int);
}TMP;
void
func(TMP
*tmp)
{
if(tmp-a
10)//如果a10,則執行回調函數。
{
(tmp-pshow)(tmp-a);
}
}
void
show(int
a)
{
printf("a的值是%d\n",a);
}
void
main()
{
TMP
test;
test.a
=
1;
test.pshow
=
show;
func(test);
}
這只是舉例,一般回調函數的用法為:
甲方進行結構體的定義(成員中包括回調函數的指針)
乙方定義結構體變量,并向甲方注冊,
甲方收集N個乙方的注冊形成結構體鏈表,在某個特定時刻遍歷鏈表,進行回調。
文章標題:c語言注冊函數回調 java注冊回調函數
文章轉載:http://m.kartarina.com/article8/dodspop.html
成都網站建設公司_創新互聯,為您提供App設計、建站公司、做網站、網站導航、動態網站、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯